delphi - पास्कल के लिए उचित संरचना वाक्यविन्यास यदि फिर अंत शुरू होता है और;



inno-setup pascal (1)

मुझे पास्कल में लिखने के बाद से लगभग 20 साल हो चुके हैं। मैं भाषा के संरचना तत्वों का सही तरीके से उपयोग नहीं कर सकता हूं, जहां मैं घोंसला बना रहा हूं if then begin और end का उपयोग करके ब्लॉक end । उदाहरण के लिए यह मुझे एक कंपाइलर त्रुटि "पहचानकर्ता की उम्मीद" हो जाता है

procedure InitializeWizard;
begin
  Log('Initialize Wizard');
  if IsAdminLoggedOn then begin
    SetupUserGroup();
    SomeOtherProcedure();
  else begin (*Identifier Expected*)
    Log('User is not an administrator.');
    msgbox('The current user is not administrator.', mbInformation, MB_OK);
    end  
  end;
end;

बेशक अगर मैं हटाता हूं तो उनके साथ जुड़े ब्लॉक और begin end ब्लॉक फिर सब कुछ ठीक है।

कभी-कभी मुझे इसे इस तरह का सिंटैक्स सही लगता है और यह ठीक हो जाता है, लेकिन if then else ब्लॉक करते हैं if then else समस्याएँ अधिक हो जाती हैं।

समस्या का समाधान यहां पर्याप्त नहीं है। मैं इन ब्लॉकों का उपयोग करने के लिए एक बेहतर समझ रखना चाहता हूं। मुझे एक अवधारणा स्पष्ट रूप से याद आ रही है। C ++ या C # से कुछ शायद मेरे दिमाग के दूसरे हिस्से से रेंग रहा है और मेरी समझ को गड़बड़ कर रहा है। मैंने इसके बारे में कुछ लेख पढ़े हैं, और मुझे लगता है कि मैं इसे समझता हूं और फिर मैं नहीं।


आपको हर begin को उसी स्तर पर end , जैसे कि

if Condition then
begin
  DoSomething;
end
else
begin
  DoADifferentThing;
end;

यदि आप चाहें तो प्लेसमेंट को प्रभावित किए बिना उपयोग की जाने वाली लाइनों की संख्या को छोटा कर सकते हैं। (उपरोक्त आसान हो सकता है जब आप पहली बार सिंटैक्स के लिए उपयोग हो रहे हों, हालांकि।)

if Condition then begin
  DoSomething
end else begin
  DoADifferentThing;
end;

यदि आप एक भी कथन निष्पादित कर रहे हैं, तो begin..end वैकल्पिक हैं। ध्यान दें कि पहली शर्त में एक समाप्ति नहीं है ; , जैसा कि आप अभी तक बयान समाप्त नहीं कर रहे हैं:

if Condition then
  DoSomething
else
  DoADifferentThing;

अर्धविराम एक ब्लॉक में अंतिम कथन पर वैकल्पिक है (हालांकि मैं आमतौर पर इसे तब भी शामिल करता हूं जब यह वैकल्पिक हो, भविष्य के मुद्दों से बचने के लिए जब आप एक पंक्ति जोड़ते हैं और एक ही समय में पूर्ववर्ती पंक्ति को अपडेट करना भूल जाते हैं)।

if Condition then
begin
  DoSomething;            // Semicolon required here
  DoSomethingElse;        // Semicolon optional here
end;                      // Semicolon required here unless the
                          // next line is another 'end'.

आप एकल और कई स्टेटमेंट ब्लॉक को भी जोड़ सकते हैं:

if Condition then
begin
  DoSomething;
  DoSomethingElse;
end
else
  DoADifferentThing;

if Condition then
  DoSomething
else
begin
  DoADifferentThing;
  DoAnotherDifferentThing;
end;

आपके कोड का सही उपयोग होगा:

procedure InitializeWizard;
begin
  Log('Initialize Wizard');
  if IsAdminLoggedOn then 
  begin
    SetupUserGroup();
    SomeOtherProcedure();
  end 
  else 
  begin 
    Log('User is not an administrator.');
    msgbox('The current user is not administrator.', mbInformation, MB_OK);
  end;
end;




pascalscript