#ios #swift
Потихоньку начинаю изучать Swift и программирование вообще. В одном из уроков рассказывается про инкремент, декремент, постфиксную, префиксную формы записи и прочее. Но попробовав получаю такое предупреждение: Т.к. с английским туго как и с программированием (близко к нулю) с Гугл переводчиком стало понятно, что это все будет удалено в третьей версии. Но почему? По описанию очень удобные вещи.
Ответы
Ответ 1
О-о, на эту тему опубликован целый документ, предлагающий удаление. По всей видимости, предложение было принято. Из значимых аргументов против: Не экономят место. По сравнению с x += 1 выражение x++ не особо-то короче. Конфликтуют с семантикой остального языка. В Swift присваиания и схожие изменяющие действия возвращают Void. Эти — нет. Запутывают разработчиков. Код, использующий возвращаемые значения этих операторов, очень тяжело воспринимается. Swift определяет порядок вычисления своих конструкций, поэтому foo(++a, a++)... хотя бы ведёт себя известным образом (в С++, скажем, такой роскоши нет), но для понимания нужно знать дебри языка. А можно, где это важно, произвести изменения заранее в нужном порядке. Полученный код будет даже лучше отражать алгоритм. Редко применимы. Они применимы к довольно небольшому числу типов: целым и вещественным числам, чему-нибудь итератороподобному... но для комплексных чисел, матриц и т. п. они просто не имеют смысла. Редко нужны. Где использовать их? В циклах? В Swift уже достаточно синтаксических удобств для них (for-in, диапазоны, enumerate, map и другие), поэтому подобные конструкции в идиоматичном Swift-коде не должны возникать вообще. Считаю нужным предупредить, что сам я не знаю Swift, но со стороны Ruby, где этого семейства операторов нет и не было, это выглядит очень осмысленным изменением. Когда можно безопасно инкапсулировать сложные способы итерации внутрь классов-генераторов (или других аналогичных механизмов: в Ruby это методы с блоками), частое использование сокращений вроде ++ и -- перестаёт иметь смысл. А когда конструкция используется редко, мало смысла иметь в языке её сокращённый синоним: это лишнее усложнение синтаксиса*, что плохо действует на понимание кода программистами и как следствие на стабильность итогового продукта. Напоминаю также, что "ошибка на единицу" очень часто встречающаяся штука. * --x можно распознать и как -(-x), два применения унарного минуса, что несколько отличается от того, что делает предекремент — подобные синтаксические неоднозначности делают язык более сложным в использовании, поэтому от них есть смысл избавляться
Комментариев нет:
Отправить комментарий