2015-12-09 37 views
13

To pytanie dotyczy HISTORII (nie aktualne opinie w tej sprawie).Jaki był powód wycofania oceny przypisania Swift?

Podczas czytania postu o zrzucaniu wsparcia dla operatorów increment/dérement dla Swift czytam taki tekst "Swift już odchodzi od C w tym, że =, + = i inne operacje podobne do przydziału zwracają Void (z wielu powodów)" .

Tak więc w przeszłości deweloperzy świadomie zdecydowali, że z pewnych względów oceniamy zadania.

I Szukam tych historyczne (teraz) powodów. W zasadzie ten wątek dotyczy przyczyn historycznych dla Scala.

+0

Czy możesz podać link do artykułu o zmniejszaniu wsparcia dla zwiększenia/zmniejszenia? Jestem zainteresowany czytaniem tego. – FreeNickname

+1

@FreeNickname, na pewno, spójrz: https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md – greenoldman

+0

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

Odpowiedz

14

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 .