2015-01-29 19 views
7

Son olarak Pascal'da yazmam gerekenden 20 yıl geçti. İç içe geçtiğim yerde dilin yapı elemanlarını, başlangıç ​​ve bitiş komutlarını kullanıyorum. Örneğin bu bana if then blok ve o zaman her şey Tamam onlarla ilişkili begin end blokları kaldırmak eğer TabiiPascal için uygun yapı sözdizimi sonra başlayacak ve; (Inno Kurulumu'nda)

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; 

bir derleyici hata "Beklenen Identifier" alır.

Bazen bu tür bir sözdizimini doğru olarak anladım ve Tamam çalışıyor, ancak sorunlar if then else bloklarını yerleştirirken kötüleşiyor.

Burada sorunu çözmek yeterli değil. Bu blokları nasıl kullanacağımı daha iyi anlamak istiyorum. Açıkçası bir kavramı özlüyorum. C++ ya da C# 'dan gelen bir şey muhtemelen aklımın başka bir parçasından geçiyor ve anlayışımı bozuyor. Bununla ilgili birkaç yazı okudum ve sanırım anlıyorum ve yapmıyorum.

cevap

24

Sen İsterseniz, yerleştirme etkilemeden kullanılan satır sayısını kısaltabilir

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

gibi aynı seviyede bir end her begin eşleşmesi gerekir. (Önce olsa, sözdizimi alışmak yaparken yukarıda daha kolay olabilir.)

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

tek bir deyimi yürütme ediyorsanız, begin..end isteğe bağlıdır. İlk koşul henüz açıklama biten değiliz gibi bir, ; sonlandırma içermediğini Not:

if Condition then 
    DoSomething 
else 
    DoADifferentThing; 

noktalı virgül (isteğe bağlıdır bile ben genellikle dahil rağmen bir blokta son deyimi sırasında isteğe bağlıdır Bir çizgi eklediğinizde ve önceki satırı aynı anda güncellemeyi unuttuğunuzda, gelecekteki sorunları önlemek için).

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

Siz de tekli ve çoklu deyim bloklarını birleştirebilirsiniz:

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

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

Kodunuzdaki için doğru kullanım olacaktır:

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; 
+0

nasılsa yanılmıyorsam izlenim de başka bloğu bir başlangıç ​​bloğu bitti .... Bu çılgın fikri nereden aldığım hakkında hiçbir fikrim yok. Çok yardımcı, teşekkürler. – amalgamate

+0

Bitiş bloğu, sonlandırılmıyor ise .... engellenmiyor mu? Onun sadece ';' – amalgamate

+1

@amalgamate: Eğer 'begin' kullanmıyorsanız,' end''e ihtiyacınız yoktur. Yukarıdaki üçüncü kod örneğime bakın. –

İlgili konular