Chyba pro dnešní den

vložil Radek Červinka 19. dubna 2012 18:40

Je třeba to zveřejnit jako odstrašující případ (kód je trochu upraven)


const
  ciTabBarInterval = 0;
  ciTabBarDay = 1;
  ciTabBarWeek = 2;
var
  bIsInterval: Boolean;
…

bIsInterval:= not TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek];

Problém byl, když byl TabBar.SelectedTab.Index = 0. Takto samostatně je to evidentní že?

Problém je samozřejmě s prioritou. Operátor not má větší prioritu než in. Index je typu Integer, takže se provede not Index (pro hodnotu 0 je binární not ve výsledku samé binární 1, tj. -1). Pro začátečníky připomínám, že nejvyšší bit u typu integer určuje znaménko - proto ta -1.

No a -1 samozřejmě v tom intervalu není.

Pro správné řešení stačí samozřejmě jen doplnit závorky:


bIsInterval:= not (TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek]);

Tagy: , ,

Praxe | Začátečníci

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců