Przynajmniej jednym z powodów jest bezpieczeństwo w operacjach porównawczych. Pisząc w C, Objective-C, etc., ile razy zdarzyło ci napisane tak:
if (x = 2)
zamiast
if (x == 2)
Nowsze wersje kompilatorów wprowadziły szczególne ostrzeżenia dla powyższego przypadku, ale wow, ten brakujący znak równości spowodował trudne do zidentyfikowania błędy w moim kodzie przez lata.
W systemie typu Swift byłby to mniejszy problem, ponieważ zwrócona wartość najprawdopodobniej nie byłaby zgodna z protokołem BooleanType, ale gdyby tak się stało (if x = false
), nadal mógłbyś trafić te błędy. Wiele Swift ma na celu wyeliminowanie typowych przyczyn błędów, które napotkali ludzie, w tym tej.
ta jest zawarta w książce Swift język programowania, pod "Basic Operators":
przeciwieństwie operatora przypisania w C i Objective-C, operator przypisania w Swift sama nie zwraca wartości. Poniższy oświadczenie nie jest ważne:
if x = y {
// this is not valid, because x = y does not return a value
}
Zapobiega to operatorowi przypisanie (=) przed użyciem przez wypadku, gdy równe operatora (==) jest w rzeczywistości przeznaczona. Podając , jeśli x = y jest nieważne, Swift pomaga uniknąć tego rodzaju błędów w kodzie .
Czy możesz podać link do artykułu o zmniejszaniu wsparcia dla zwiększenia/zmniejszenia? Jestem zainteresowany czytaniem tego. – FreeNickname
@FreeNickname, na pewno, spójrz: https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md – greenoldman
w C możesz użyć czegoś jak, jeśli i = 1 {}. wynik przypisania zwraca wartość, której możesz użyć. w szybkich takich stwierdzeniach nie będzie się kompilować, a powodem (tak myślę) jest uniknięcie niepożądanego efektu ubocznego. Mogę zgodzić się z tym pomysłem, po przeciwnej stronie naprawdę nie widzę, dlaczego ++ i, i ++. --i, i-- powinien być usunięty z języka. Przeczytałem artykuł przynajmniej dwa razy i nadal nie jest to dla mnie jasne. – user3441734