Widzę dużo kodu, jak to w próbkach i na odcinki, które generuje XCode:Podwójne nawiasy w kodzie próbki
if ((self = [super init])) {
}
nie jestem jasne o zamiarze podwójnego nawiasu w warunkowej.
Widzę dużo kodu, jak to w próbkach i na odcinki, które generuje XCode:Podwójne nawiasy w kodzie próbki
if ((self = [super init])) {
}
nie jestem jasne o zamiarze podwójnego nawiasu w warunkowej.
Aby rozwinąć na @Anders komentarzu, specyficzny problem to chroni Cię przed idzie tak:
if (foo = x) { do_something() };
90% czasu to jest błąd. Miałeś zamiar powiedzieć: foo == x
. Ale w 10% przypadków naprawdę chodziło o "przypisać x do foo, a następnie sprawdzić prawdę". Kanonicznym przykładem tego jest while (ch = getchar())
. Ale if (self = [super init])
to kolejny dobry przykład. Kompilator zakłada, że takie rzeczy są błędami i generuje ostrzeżenie, chyba że powiesz kompilatorowi, że naprawdę to zrobiłeś, używając podwójnych nawiasów.
Osobiście po prostu zrobić to w ten sposób:
self = [super init];
if (self != nil)
{
...
}
return self;
To dodatkowa linia, ale utrzymuje, że rzeczy po prostu odrobinę jaśniejsze, gdy połączenie init jest długa.
Astronauta, Aaron Hillegass ze sławą Big Nerd Ranch zakwestionował wielu z nas, aby wymyślić jakikolwiek przypadek, w którym to faktycznie miało znaczenie to sprawdzanie self==nil
. Przypadki istnieją, ale są niewiarygodnie rzadkie (możesz dodać self
jako obserwatora i nie chcesz, aby był w tym przypadku nil
). Weź to, co jest warte; w moim osobistym kodzie często pomijam test nil
, ale w moim profesjonalnym kodzie jest to część standardu mojego zespołu.
Z drugiej strony, z jakiegoś powodu Apple dodał dodatkową opcję gcc -Wmost
, która wyłączy to ostrzeżenie. Sądzę, że ktoś nie lubił pisać dodatkowych nawiasów. Nie wydaje mi się, żeby go wyłączyć.
to tylko po to, aby uniknąć ostrzeżenia.
i na szczęście (nowoczesne) kompilatory wydają ostrzeżenia. wiele błędów można wprowadzić przez przypadkowe użycie przydziału kontra równości w wyrażeniu warunkowym - nie należy ich ignorować w sposób trywialny. –
Tak, w objc, gdy pojawi się ostrzeżenie, może to być coś naprawdę poważnego, więc pozbycie się tych błahych ułatwia wykrycie tych paskudnych. –