Comments 21
Имхо все-таки это не для больших проектов, где множество людей работают над одним и тем же кодом и необходима понятность без контакта с писавшим код.
Но все равно спасибо за интересную статью :)
Но все равно спасибо за интересную статью :)
+2
Это не более чем просто особенность языка, понятность достигается тем, что все будут знать эти особенности.
0
Ну тут покажет только время…
+3
Тут вобщем-то аналог вызов функции по её указателю, вещь весьма обыденная, таким образом например удобно писать парсер чего-нибудь. Ну то есть механизм немного другой, но суть близка. А вот синтаксический сахар действительно немного вводит ступор, если в примере 2.1 еще легко читается «функция которая принимает агрументом другую функцию», то запись 2.2. или не дай бог 2.4 уже вводит в ступор, если не встречаешь такие штуки часто. Даже не знаешь что у гугла спрашивать {$0 — $1}
0
На любом крупном проекте есть свои стайл-гайды.
Например даже на опенсорсном OpenEmu: github.com/OpenEmu/OpenEmu/wiki/Style-Guide
Например даже на опенсорсном OpenEmu: github.com/OpenEmu/OpenEmu/wiki/Style-Guide
-2
Отлично!
Только синтаксис 2.2 и 2.3 не очень приятен на глаз.
Только синтаксис 2.2 и 2.3 не очень приятен на глаз.
0
Хорошая обзорная статья, спасибо!)
Как java-related разработчик не могу не заметить, что немного похоже на Scala. Или мне просто кажется и это просто веяния современности.
Тем не менее, жду не дождусь, когда на нем можно будет писать полноценные приложения.
Как java-related разработчик не могу не заметить, что немного похоже на Scala. Или мне просто кажется и это просто веяния современности.
Тем не менее, жду не дождусь, когда на нем можно будет писать полноценные приложения.
0
Отличная статья — спасибо. Не знала про «Ход конем» — в книге «The Swift Programming Language» об этом — мимолетно.
К предыдущему комментарию:
«Не понимаю, зачем чего-то ждать — на Swift уже вовсю пишут „полноценные приложения“».
К предыдущему комментарию:
«Не понимаю, зачем чего-то ждать — на Swift уже вовсю пишут „полноценные приложения“».
0
UFO just landed and posted this here
UFO just landed and posted this here
Да, «примитивная» Apple — самая успешная и дорогая компания в мире, а вы, ребята, сидите в «минусе» или в «нуле» с вашим «интеллектуальным» высокомерием.
0
Вообще, такая простая операция приведена только ради примера. На самом деле ведь внутри функции, принимающей операторную функцию, как параметр, может быть сколько угодно сложная логика. И применения могут быть неожиданные. Достаточно просто помнить о такой возможности.
Вот одно из применений, о котором, наверное, стоило упомянуть в статье. Передаем операторную функцию как параметр при сортировке:
Вот одно из применений, о котором, наверное, стоило упомянуть в статье. Передаем операторную функцию как параметр при сортировке:
sorted([5, 7, 3], <) // результат [3, 5, 7]
sorted("sortme", >) // результат "tsrome"
0
Как я уже писал в другом месте, приводите реальные примеры! Иначе многим(в т.ч. и мне) просто не понятно, в каких моментах это стоит использовать в своих проектах, и стоит ли оно вообще того…
0
Была идея использовать «Ход конем» в приложении «Калькулятор», когда символ с кнопки — "+", "-", «х»… — почти напрямую (может быть через Dictionary ) попадает в
Так работает:
А вот такой словарь:
дает ошибку.
Может быть есть идеи?
performOperation
, но оказалось, что операторную функцию можно задавать только явно.Так работает:
func performOperation(op1: Double, op2: Double, operation: (Double, Double) -> Double) -> Double {
return operation(op1, op2)
}
func addDouble (a1:Double, a2:Double) ->Double {return (a1 + a2)}
func multiplyDouble (a1:Double, a2:Double) ->Double {return (a1 * a2)}
let operationDictionary: Dictionary<String, (Double, Double) -> Double > = [ "+": addDouble , "x": multiplyDouble]
var symbolOperation:String = "x"
if let operation = operationDictionary[symbolOperation] { performOperation(3.0, 2.0, operation)} // 6
А вот такой словарь:
let operationDictionary: Dictionary<String, (Double, Double) -> Double > = [ "+": + , "x": *]
дает ошибку.
Может быть есть идеи?
0
Вы создали словарь со «значком». Создайте словарь с лямбдами. Как-то так:
Понимаю, что не так изящно, как "+", но лучше, чем явно заданная где-то вверху функция.
let operationDictionary: Dictionary<String, (Double, Double) -> Double > = [ "+": {$0 + $1} , "x": {$0 * $1}]
Понимаю, что не так изящно, как "+", но лучше, чем явно заданная где-то вверху функция.
+1
Не знаю почему, но так работает:
func performOperation(op1: Double, op2: Double, operation: (Double, Double) -> Double) -> Double {
return operation(op1, op2)
}
let operationDictionary: Dictionary<String, (Double, Double) -> Double > = [ "+": (+) , "x": (*), "-": (-)]
var symbolOperation:String = "x"
if let operation = operationDictionary[symbolOperation] { performOperation(3.0, 2.0, operation)} // 6
0
Обновил текст статьи, добавил пример в конце.
0
Sign up to leave a comment.
Используем замыкания в Swift по полной