Uczę się Ada, naprawiając błędy i odczytując kod. Zauważyłem, że niektóre stwierdzenia są wymieniane z "i", a inne z "a potem". podobnie jest "lub" i inne miejsca tam "lub inaczej". Współpracownik mówi, że to po prostu cukier syntaktyczny i nie robi różnicy. Zastanawiam się, czy on ma rację?Czy istnieje różnica między "i" kontra ", a następnie" w instrukcji IF
Odpowiedz
W Ada and then
i or else
są tak zwane „zwarcia” formy odpowiednio, and
i or
Operatorzy:
operatorzy Skróty [
and then
,or else
] są wykorzystywane do oceny częściach wyrażenia boolowskie warunkowe. Nigdy nie powinno się tego robić , aby przyspieszyć ocenę (dzięki nowoczesnym kompilatorom optymalizującym, może to nie być możliwe). Poprawnym zastosowaniem jest zapobieganie ocenie wyrażeń, o których wiadomo, że powodują wyjątek.
Przykład (brane jako wyjaśnienie powyżej, z wikibooks/Ada)
if Dog /= null and then G (Dog) then
Walk (Dog);
end if;
tu G (pies) będą oceniane tylko jeżelipsa nie jest zerowy. Bez wartości and then
byłaby ona jednak poddana ewaluacji, podnosząc wyjątek, jeśli Dog rzeczywiście ma wartość zerową.
Należy pamiętać, że and then
i or else
nie są operatorami, ponieważ nie mogą być przeciążone.
Sugeruję przeczytanie tego wikibook, pomoże ci to w podróży przez Adę.)
+1 za podanie linku do wikibook - najbardziej przydatny zasób – erict
Załóżmy, że FuncB jest funkcją zwracającą wartość logiczną, która ma efekt uboczny. W
if False and FuncB then
null;
end if;
skutkiem ubocznym FuncB stanie, podczas gdy w formie skróconej obwodu
if False and then FuncB then
null;
end if;
skutkiem ubocznym FuncB nie występuje.
Konstrukcja and then
jest cechą, którą niektóre języki programowania nazywają zwarciem.
można przetestować i zrozumieć tę funkcję przez próby te fragmenty kodu:
x:=0;
if false and 1/x=1 then
null;
end if;
Ten spowoduje dzielenie przez zero wyjątku.
x:=0;
if false and then 1/x=0 then
null;
end if;
Ten nie spowoduje wyjątku, ponieważ nie sprawdza drugiego warunku.
'false i [then] 1/x' daje komunikat o błędzie podczas kompilacji, ponieważ' 1/x' nie jest typu 'Boolean '. –
- 1. Czy jest jakaś różnica między używaniem wielu instrukcji if, a innych instrukcji if?
- 2. Czy istnieje różnica między SSLv3 a TLS1.0?
- 3. Czy istnieje różnica między listą a krotką?
- 4. Różnica między różnymi sposobami pisania IF istnieje?
- 5. IF EXISTS, a następnie wybierz ELSE INSERT, a następnie wybierz
- 6. Dla początkującego, czy istnieje duża różnica między MySQL a PostgreSQL
- 7. Czy istnieje różnica między funkcją zi bez instrukcji return?
- 8. Różnica (jeśli istnieje) między `a 'w javascript
- 9. Czy wiele instrukcji "if" i "if-else-if" jest takich samych dla warunków wykluczających się wzajemnie?
- 10. Czy istnieje różnica między podłogą a ucięciem w Haskell
- 11. Czy można wykonać wiele instrukcji w instrukcji "if"?
- 12. Czy należy unikać wielu instrukcji if, takich jak "if (warunek) if (warunek) ..." w Javie?
- 13. Czy istnieje jakaś różnica między "Object [] x" a "Object x []"?
- 14. Wiele instrukcji IF i instrukcji excel
- 15. if (listStr.size == 0) {kontra if (listStr.isEmpty()) {
- 16. PHP: Czy istnieje różnica między {$ foo} a $ {foo}
- 17. Czy istnieje sposób użycia warunku instrukcji If jako jej wartości?
- 18. Czy istnieje różnica między odniesieniami uniwersalnymi a referencjami przekazywania?
- 19. Czy istnieje różnica między "docker ps" a "docker container ls"?
- 20. Czy istnieje jakaś różnica między odlewaniem typu a konwersją typu?
- 21. Czy istnieje różnica między tablicami malloced a nowymi tablicami
- 22. Różnica między String [] a i String ... a
- 23. Czy istnieje różnica między [] a list() podczas korzystania z id()?
- 24. Czy istnieje różnica między serwerem WWW a usługą sieciową?
- 25. Czy istnieje różnica między metodą ToString a rzutowaniem na ciąg?
- 26. Czy istnieje jakaś różnica między formantem a widżetem?
- 27. Czy istnieje różnica między kwalifikatorem _Atomic a specyfikatorem typu?
- 28. Różnica między || a = b i a = a || b w rubin?
- 29. Różnica między session.evict kontra clear
- 30. różnica między "ifndef" i "if! Defined" w C?
+1 za pytanie :-) –
krótka odpowiedź - Tak. – NWS
NWS - krótsza (i poprawna) odpowiedź brzmi Nie! –