Re[5]: Android для дотнетчиков, но по-человечески
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.11.20 22:30
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Ладно, "ксерокс" еще можно было простить за отсутствием словарей, но "ксеон" до сих пор режет глаз и слух, а теперь еще и "кзамарин"...


Привыкай. Буквы Экс в нашем языке нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Android для дотнетчиков, но по-человечески
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.11.20 09:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Буквы Экс в нашем языке нет.


В произношении слова Xamarin нет звуков "экс".
Re[4]: Kotlin lambdas
От: sergeya Ниоткуда http://blogtani.ru
Дата: 14.11.20 17:21
Оценка:
Здравствуйте, 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>
Q>run { println("...") }
Q>

Q>— https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter


А вот к этому синтаксису я никак не могу привыкнуть, он мне кажется очень нелогичным, ломает стройность языка.
list.binarySearch(0, 10) { it.compareTo(x) }


Это вызов метода с тремя параметрами, последний из которых — лямбда. Где логика, где смысл?
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[5]: Type-Safe Builders
От: Qbit86 Кипр
Дата: 16.11.20 07:14
Оценка: 8 (1)
Здравствуйте, sergeya, Вы писали:

S>Это вызов метода с тремя параметрами, последний из которых — лямбда. Где логика, где смысл?


Как минимум, это удобно при вложенности таких лямбд. Например, при определении «DSL» через билдеры (частый паттерн в Kotlin): https://kotlinlang.org/docs/reference/type-safe-builders.html
Глаза у меня добрые, но рубашка — смирительная!
Re[7]: Синтаксис содран
От: Qbit86 Кипр
Дата: 16.11.20 07:31
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S> Ну синтаксис содран с TypeScript


Во-первых, сдирать с других я зыков это не то что зазорно; это в принципе лежит в основе проектирования Kotlin. У Андрея Бреслава — главного архитектора языка — есть даже лекция на эту тему: «На плечах гигантов: языки, у которых учился Kotlin». Он её много раз читал на разных конференциях.

S> Ну синтаксис содран с TypeScript


Во-вторых — а можно пруфы? Я не знаю TypeScript, но не могу нагуглить про обсуждаемые trailing lambdas и single parameter lambdas.

S> в C# есть куча Func<T,...T64> и Action это по моему проще.


Причём здесь... Создаётся впечатление, что ты совсем не понял, о чём шла речь. Ты точно читаешь ответы на свои вопросы? Или это для тебя просто low-effort-чатик с целью потратить время собеседников?
Глаза у меня добрые, но рубашка — смирительная!
Re[8]: Синтаксис содран
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.11.20 07:48
Оценка:
Здравствуйте, 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 )
и солнце б утром не вставало, когда бы не было меня
Re[9]: Синтаксис содран
От: Jack128  
Дата: 16.11.20 08:25
Оценка: 105 (3)
Здравствуйте, Serginio1, Вы писали:

S>Но в чем профит?

S>val product = items.fold(1) { acc, e -> acc * e }
S>на шарпе
S>var product = items.fold(1,(acc, e) => acc * e)

S>ints.filter { it > 0 }

S>на шарпе
S>ints.filter ( it=> it > 0 )

Профит в легком создании dsl. Например аналог lock в kotlin — можно реализовать просто функцией, а не отдельной языковой конструкцией:

lock(syncRoot) {
   doWork();
}


https://kotlinlang.org/docs/reference/type-safe-builders.html
Re[10]: Scope Functions
От: Qbit86 Кипр
Дата: 16.11.20 08:45
Оценка: +1
Здравствуйте, Jack128, Вы писали:

J>Например аналог lock в kotlin — можно реализовать просто функцией, а не отдельной языковой конструкцией:


J>
lock(syncRoot) {...}


Так же неплохо выглядят scope functions: let, run, with, apply, also. Например:
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-лямбдой.
Глаза у меня добрые, но рубашка — смирительная!
Re[6]: Type-Safe Builders
От: sergeya Ниоткуда http://blogtani.ru
Дата: 16.11.20 16:19
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, sergeya, Вы писали:


S>>Это вызов метода с тремя параметрами, последний из которых — лямбда. Где логика, где смысл?


Q>Как минимум, это удобно при вложенности таких лямбд. Например, при определении «DSL» через билдеры (частый паттерн в Kotlin): https://kotlinlang.org/docs/reference/type-safe-builders.html


Имхо такая неоднозначность в синтаксисе — это слишком большая цена за возожность писать одинарные скобки вместо двойных "{ ... }" vs "({ ... })".

И плохо, что рефакторинг в Android Studio настаивает на использовании такого синтаксиса везде без разбору.


p.s. А пример c dsl-ем интересный, не знал о таком приемчике. Спасибо )
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.