Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Ладно, "ксерокс" еще можно было простить за отсутствием словарей, но "ксеон" до сих пор режет глаз и слух, а теперь еще и "кзамарин"...
Привыкай. Буквы Экс в нашем языке нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, Serginio1, Вы писали:
Q>Там есть много хороших фич, конечно, и я назову не главные. Но меня прёт от синтаксиса лямбд для некоторых частых частных случаев.
Q>
Q>Passing trailing lambdas
Q>In Kotlin, there is a convention: if the last parameter of a function is a function, then a lambda expression passed as the corresponding argument can be placed outside the parentheses:
Q>
Q>val product = items.fold(1) { acc, e -> acc * e }
Q>
Q>Such syntax is also known as trailing lambda.
Q>If the lambda is the only argument to that call, the parentheses can be omitted entirely:
Q>
Здравствуйте, Serginio1, Вы писали:
S> Ну синтаксис содран с TypeScript
Во-первых, сдирать с других я зыков это не то что зазорно; это в принципе лежит в основе проектирования Kotlin. У Андрея Бреслава — главного архитектора языка — есть даже лекция на эту тему: «На плечах гигантов: языки, у которых учился Kotlin». Он её много раз читал на разных конференциях.
S> Ну синтаксис содран с TypeScript
Во-вторых — а можно пруфы? Я не знаю TypeScript, но не могу нагуглить про обсуждаемые trailing lambdas и single parameter lambdas.
S> в C# есть куча Func<T,...T64> и Action это по моему проще.
Причём здесь... Создаётся впечатление, что ты совсем не понял, о чём шла речь. Ты точно читаешь ответы на свои вопросы? Или это для тебя просто low-effort-чатик с целью потратить время собеседников?
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, Serginio1, Вы писали:
S>> Ну синтаксис содран с TypeScript
Q>Во-первых, сдирать с других я зыков это не то что зазорно; это в принципе лежит в основе проектирования Kotlin. У Андрея Бреслава — главного архитектора языка — есть даже лекция на эту тему: «На плечах гигантов: языки, у которых учился Kotlin». Он её много раз читал на разных конференциях.
S>> Ну синтаксис содран с TypeScript
Q>Во-вторых — а можно пруфы? Я не знаю TypeScript, но не могу нагуглить про обсуждаемые trailing lambdas и single parameter lambdas.
Спутал с хаскелем
В TypeScript
(x: number, y: number) => number
S>> в C# есть куча Func<T,...T64> и Action это по моему проще.
Q>Причём здесь... Создаётся впечатление, что ты совсем не понял, о чём шла речь. Ты точно читаешь ответы на свои вопросы? Или это для тебя просто low-effort-чатик с целью потратить время собеседников?
Да прошу прощения. Каюсь
Но в чем профит?
val product = items.fold(1) { acc, e -> acc * e }
на шарпе
var product = items.fold(1,(acc, e) => acc * e)
ints.filter { it > 0 }
на шарпе
ints.filter ( it=> it > 0 )
и солнце б утром не вставало, когда бы не было меня
val numbers = mutableListOf("one", "two", "three")
val firstAndLast = with(numbers) {
"The first element is ${first()}," +
" the last element is ${last()}"
}
Здесь «with(numbers) {...}» с протаскиванием контекста в this (чтоб писать first() вместо numbers.first()) выглядит как специальный синтаксис с блоком инструкций {...}; похожий есть и в других языках. Но в Kotlin это обычная функция, вызываемая с trailing-лямбдой.
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, sergeya, Вы писали:
S>>Это вызов метода с тремя параметрами, последний из которых — лямбда. Где логика, где смысл?
Q>Как минимум, это удобно при вложенности таких лямбд. Например, при определении «DSL» через билдеры (частый паттерн в Kotlin): https://kotlinlang.org/docs/reference/type-safe-builders.html
Имхо такая неоднозначность в синтаксисе — это слишком большая цена за возожность писать одинарные скобки вместо двойных "{ ... }" vs "({ ... })".
И плохо, что рефакторинг в Android Studio настаивает на использовании такого синтаксиса везде без разбору.
p.s. А пример c dsl-ем интересный, не знал о таком приемчике. Спасибо )