Фууууу, слился. Никудышный какой-то из тебя инициатор срачей.Этот спор можно продолжать бесконечно, а мне этого не хочется. Так что это конец)
Отсутствие необходимости куда-то конвертировать коллекции на интеропе с жабакодом - это плюс настолько очевидный и необходимый для проектов, которые не могут позволить себе быть завязанными на другой язык, что спорить с этим абсолютно невозможно. Если ты делаешь приложение с самого начала на скале и юзаешь скала-библиотеки, то тебе это безразлично, конечно, но мы-то тут модиками на майнкампф зарабатываем на хлеб.
val scalaList = javaList.asScala
вот так происходит преорбразование)) Довольно просто, не так ли? Проведя бенчмарки я выяснил что в среднем конвертация занимает 90 миллисекунд. При том создание жава коллекции через Lists занимает 762 миллисекунд. Так что я думаю конвертация это не сильно большая проблема. При этом скала коллекции поддерживают ФП в полной мере и со всеми удобствами. В отличии от Котлина взаимодействие идет на уровне синтаксиса. Например for {i <- list; if i < 0} {}
преобразуется в list.withFilter(_ < 0).foreach()
на map есть тоже своя фишка) Так же например могу написать что то типа list forEach println
и он выведет все элементы в консоль. И это все прям внутри класса в то время как в Котлине это где-то сбоку. Где то может и есть такие гении, но это ни ты ни я))Я уже понял что ты за неделю не разобрался, не аргумент, нормальные люди разобрались))0
Ну например хочется мне проходясь сверху вниз найти твердый блок для случайной телепортации.А реальные примеры есть? Эти - куски лютого говнокода какие-то, без значимых причин так делать убил бы за такое. Первое выглядит как технический онанизм; подобное второму часто приводят в пример адепты скалы, но часто у вас в одной переменной Int и String могут быть? Бтв, второй пример почти один в один переписывается на котлин, так что ты опять подтвердил что тебе мало недели на пролистывание коротенького референса языка и немножко экспериментов с ним
for (y <- 256 to 3 by -1) {
val block = world.getBlock(x, y, z)
block match {
case Blocks.lava | Blocks.water => return -1
case some: Block if some.getMaterial != Material.air => return y + 1
case _ => ()
}
}
sealed class Vertex protected()
case class SimpleVertex(x: Float,
y: Float,
z: Float)
case class BoneVertex(x: Float,
y: Float,
z: Float,
bone: Int,
influence: Float) extends Vertex
def processVertex(vertex: Vertex): Unit = {
vertex match {
case SimpleVertex(x, y, z) => // Чо-нить тут делаем
case BoneVertex(x, y, z, bone, influence) => // Делаем тут чо-нить другое
}
}
Плагин как бы от JetBrains и как бы он тоже не плох. Соглашусь что немного послабее чем для котлина, но я предпочитаю думать что это из-за сложности языка)Нативная поддержка - это не когда плагин ставится за секунду, а когда плагин делают плюс-минус те же люди, что делали основной функционал IDE, и он в целом сделан на том же уровне.
Ты же не компилируешь код каждые 20 секунд, максимум при дебаге. А там как бы инкрементально. Какие проблемы? Но вот код ты пишешь много и часто. И вот писать один и тот же параметр 200 раз в разные функции как то не хочется. И вот тут выходят неявные параметры)) Так же неявными параметрами могут считаться сингельтоны (object). Так же удобны неявные функции с помощью которых я могу писать код вплоть до такого:Зато я уже говорил про скорость компиляции, и упоминание тут hohserg'ом инкрементального компилятора как будто это какой-то успех - не аргумент, он есть у всех. Надеюсь сам свяжешь скалаимплиситы с ее скоростью компиляции))
val input = new InputStream()
val age: Int = input
Лишний класс!11!! + несколько байт!!11! Вас это обычно волнуетА зачем её инлайнить-то? Работает как любое другое delegated property, никаких лишних временных объектов на повторном доступе не создается. С точки зрения перформанса инлайнить в jvm-байткоде есть смысл только там, где за счет этого получается избавиться от лишнего мусора в куче, остальное jit и так заинлайнит как ему надо. Видел бенчмарк на тему перформанаса делегатов, там как раз было про ленивую инициализацию, стоимость доступа получалась +10% относительно обычной проперти. Не вижу ничего криминального, наоборот вытащить фичу из компилятора в стдлибу - это же прекрасно, нет?
Убил бы за такое.Или например у меня в модели есть вершины с костями и без.
Чета такой себе пример. Тут и обычный иф нормально зайдет.Ну например хочется мне проходясь сверху вниз найти твердый блок для случайной телепортации.
val mat = block.material
if (mat !== Material.air && mat !== Material.water && mat !== Material.lava) {
return y + 1
}
Знаешь, можно вообще любой case/match/when записать ифами. Так что вообще не аргумент))Чета такой себе пример. Тут и обычный иф нормально зайдет.
Не сможешь хех)) И вообще давай обоснуй чего тут столь зашкварного?Убил бы за такое.
Почему бы и нет? Чем меньше кода(без ущерба читаемости и понятности) - тем лучше.максимально меньшее количество написанных символов и максимально большее количество синтаксического сахара на квадратный метр кода.