2015-12-09 7 views
13

Этот вопрос есть о ИСТОРИЯ (не ваши текущие мнения по этому вопросу).В чем причина того, что оценка задания Swift не указана?

При чтении сообщения об отбрасывании поддержки операторов инкремента/декремента для Swift я прочитал такой текст «Swift уже отклоняется от C, в котором операции =, + = и другие операции, подобные присваиванию, возвращают Void (по ряду причин)» ,

Так что в какой-то момент в прошлом разработчики сознательно решили оценить присвоения по умолчанию по некоторым причинам.

И я ищу эти исторические (сейчас) причины. В значительной степени это связано с историческими причинами для Scala.

+0

Не могли бы вы предоставить ссылку на статью о снижении поддержки для увеличения/уменьшения? Мне интересно его прочитать. – FreeNickname

+1

@FreeNickname, конечно, посмотрите: https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md – greenoldman

+0

в C вы можете использовать что-то например, если i = 1 {}. результат присваивания возвращает значение, которое вы можете использовать. в быстрых случаях такие утверждения не будут компилироваться, и причина (я думаю, так) заключается в том, чтобы избежать нежелательного побочного эффекта. я согласен с этой идеей, на противоположной стороне я действительно не вижу, почему ++ i, i ++. --i, i-- следует удалить с языка. Я читаю статью хотя бы дважды, и мне все еще не очень понятно. – user3441734

ответ

14

По крайней мере, одна причина заключается в том, чтобы быть более безопасным в сравнении операций. При написании в C, Objective-C и т.д., сколько раз вы написали это:

if (x = 2) 

вместо

if (x == 2) 

Новые версии компиляторов ввели специальные предупреждения о вышеупомянутом случае, но wow имеет тот недостающий знак равенства, из-за которого трудно выявить ошибки в моем коде на протяжении многих лет.

С системой типа Swift это будет менее проблематичным, поскольку возвращаемое значение, скорее всего, не будет соответствовать протоколу BooleanType, но если это произойдет (if x = false), вы все равно можете столкнуться с этими ошибками. Многие из Swift предназначены для устранения распространенных причин ошибок, с которыми столкнулись люди, включая этот.

Об этом говорится в Свифта языка программирования книги под "Basic Operators":

В отличие от оператора присваивания в C и Objective-C, оператор присваивания в Swift само по себе не возвращает значение. Следующий утверждение не действует:

if x = y { 
    // this is not valid, because x = y does not return a value 
} 

Эта функция предотвращает оператора присваивания (=) от использования аварии, когда равна оператора (==) на самом деле предназначен. По достижении , если x = y недействителен, Swift помогает избежать таких ошибок .

 Смежные вопросы

  • Нет связанных вопросов^_^