LINUX.ORG.RU

Kotlin классная штука

 ,


0

6

Написал немножко кода на нём. Язык весьма удобен. В Idea хорошо поддерживается, работают многие рефакторинги, в целом удобство использования не сильно отличается от Java.

Если сравнивать со Scala: для меня Scala это хаскель в жавечьей шкуре. Причём его апологеты продают его как better Java. Так вот, Kotlin это реальный better Java. А Scala это другой уровень. Нужен вам хаскель-подобный язык для яйцеголовых зигоморфизмов — берите Scala. Если слегка раздражает Java, но в целом всё устраивает и мозги себе ломать не хочется — берите Kotlin.

Интероп с Java замечательный, можно сказать — идеальный. Берите свой любой Java-класс и переписывайте на Kotlin. Интерфейс библиотеки коллекций в Kotlin помещается в нескольких десятках строк (привет Scala). Фич полно. Разве что продвинутого паттерн-матчинга нет и не предвидится. При этом ничего особо изучать не надо, прочитали Hello world, настроили проект и можно уже писать, по ходу дела разберётесь. Если Java знаете, конечно.

Язык пока не в релизе, иногда что-то депрекейтят и даже ломают. Но на посмотреть (или даже в не сильно критичный продакшн, если не в ломы иногда переписать старый код) вполне подходит. JetBrains говорят, что используют его во внутренних разработках и выбрасывать точно не будут, так что с этой стороны можно не переживать.

В общем язык безумно практичный и удобный, в то же время незаслуженно обделён вниманием.

★★★★★
Ответ на: комментарий от tailgunner

Убогонько.

А можно пример того, что будет плохо ложиться на данный ограниченный подход. В подавляющем большинстве случаев вроде как хватает...

anonymous
()
Ответ на: комментарий от anonymous

что-нибудь компиляторное:

case IfExpr(AndExpr(left, _), thenBody, _) => ...

Более реальный пример не приведу, но в целом где используются развесистые типизированные деревья и надо их анализировать нетривиальным образом. Я очень редко сталкиваюсь с таким.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от foror

Я вообще про использование технологий вокруг джавы - есть и языки и фреймворки и куча всего, что остается известным лишь в ущких кругах.

GblGbl ★★★★★
()
Ответ на: комментарий от GblGbl

Я вообще про использование технологий вокруг джавы - есть и языки и фреймворки и куча всего, что остается известным лишь в ущких кругах.

Так ненужно, если не становится популярным. Если что-то нужно, то оно автоматом станет популярным, простой пример - ruby и ror.

foror ★★★★★
()
Ответ на: комментарий от foror

Руби уже потерял свою былую популярность

GblGbl ★★★★★
()
Ответ на: комментарий от Legioner

Generics type erasure,

кукаретика видно сразу

anonymous
()

я глядел котлин и согласен что он лучшая ява чем ява. но всё таки скала лучше. На скале можно писать в стиле «как на яве» и при этом доступна куча фич, начиная с того же паттерн матчинга.

AndreyKl ★★★★★
()
Ответ на: комментарий от anonymous

А можно пример того, что будет плохо ложиться на данный ограниченный подход

Зависит от того, что понимать под «плохо».

          is Parent(left, right) -> sum(left) + sum(right)

понятнее и короче по токенам.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

ceylon

Еще одно ненужно, так и не взлетевший сахарок для java.

foror ★★★★★
()

Все это очень, конечно, хорошо.

Только вот для Spring-приложений используется только один скриптовый язычок.

Groovy.

А яйцеголовость в реальных приложениях не нужна.

Нужен результат.

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

Только вот для Spring-приложений используется только один скриптовый язычок.

При чем тут спринг и скрипты? Котлин как бы компилируемый, да и со спрингом прекрасно работает. Пример из реального проекта:

@Component
@Scope(value = "prototype")
open class ProcessEventExecutor @Autowired constructor(
        private val actualEventR: ActualEventRepository,
        private val methodResolver: MethodResolver,
        private val instanceS: InstanceService,
        private val processS: ProcessService) : Runnable {

............
}
Nagwal ★★★★
()
Ответ на: комментарий от anonymous

1) Вопрос в том сколько для этого «котлина» вакансий на dice.com?

2) Для мобильных приложений ФП? Не знаю, я не зарабатываю в стартапах «Рога и копыта» напейсанием программок для «ведроида».

А в enterpriZe ФП нужно.

Bioreactor ★★★★★
()

Форсинг и реклама поделий от "джетбрейнс"?

Видать, совсем никто не покупает эти «средства разработки», если есть мегарулезный Eclipse.

Выглядит поделие «есть ИДЕЯ - есть ИКЕЯ» под OS X как говно.

И работает как говно.

«Разорение начинается не с миллиона долларов, а с цента»(С)

Нищеброд не тот, кто вместо ИКЕИ поставил себе свободный Eclipse.

(У _настоящих индейцев_ для этого выброса денег на ветер, показного расточительства, есть специальное слово - «потлач»),

А нищеброд тот, кто выбросил деньги на ИКЕЮ вместо свободного Eclipse и не смог купить себе мегарулезный Mac.

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

На скале можно писать в стиле «как на яве» и при этом доступна куча фич, начиная с того же паттерн матчинга.

Ну так это и есть главный минус скалы, особенно для долгих проектов. Либо заморачиваться с очень строгими code conventions и постоянным review написанного, либо очень скоро все скатится в неподдерживаемую помойку. Потому что когда в языке реализован 1001 способ написать нечитаемый код - обязательно найдется джигит, который так и сделает.

Nagwal ★★★★
()
Ответ на: комментарий от anonymous

хорошая java это ceylon

Еще одно не пойми что не пойми зачем не пойми кому нужное.

ovk48 ★★★
()
Ответ на: комментарий от tailgunner

Так та же фигня. При этом в языке по сути и нет паттерн-матчинга. Есть просто именно синтаксически удобная конструкция switch'а по типу. В сочетании со статическими проверками контекста это даёт все, что нужно, без какого-либо усложнения языка. Разве это не красиво?

anonymous
()
Ответ на: комментарий от anonymous

Так та же фигня.

Какая «та же»? Я уже сказал про токены.

в языке по сути и нет паттерн-матчинга. Есть просто именно синтаксически удобная конструкция switch'а по типу

«switch по типу» - это форма паттерн матчинга. С какой степенью убогости она реализована в Котлине - ХЗ (проверяет ли exhaustiveness?).

это даёт все, что нужно

Лично мне нужно больше. И есть люди, для которых всё нужное есть в Java 1.0.

без какого-либо усложнения языка.

По сравнению с чем? Котлин определенно сложнее Явы.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

«switch по типу» - это форма паттерн матчинга. С какой степенью убогости она реализована в Котлине - ХЗ (проверяет ли exhaustiveness?).

Пытается проверять, но там нет возможности ограничить число наследников, поэтому всегда нужно else, даже если реально все наследники уже упомянуты.

Legioner ★★★★★
() автор топика

За несколько дней нашёл два бага в компиляторе. Оба тривиально обойти и оба сразу вываливают программу в ошибку, так что ничего страшного, но в целом пока для больше чем поиграться я бы не стал советовать, сыровато. Надо ждать релиза.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Я уже сказал про токены.

Я наверное считать не умею...

«switch по типу» - это форма паттерн матчинга

В данном случае это просто instanceof.

Лично мне нужно больше.

Так тебя и попросили показать, что же тебе нужно.

Котлин определенно сложнее Явы.

В каком месте? Даже вот в этом примере у котлина просто другой синтаксис, а так это можно на яве один в один написать.

anonymous
()

Я общался с одним из разработчиков из JetBrains, который тесно работает с Котлин. Вот его презентация (неплохая) где он рассказывает про функциональный подход в языке. https://www.parleys.com/tutorial/refactoring-functional

Пока мы говорили про просто сахар, который есть у Scala (в сравнении с Java 8) все было полее менее похоже. Но вот когда диалог зашел про асинхронные примитивы у Scala (Future/Promise), про библиотеки для реактивного программирования / больших данных (Akka/Spark) он не нашелся что сказать и ответил, что такого пока что нет (но в плане).

На самом деле они хотели использовать Скалу, но в то время она еще долго компилировалась и плохо работала с кодом на Джаве, вот они и сделали свой язык.

Mironor
()
Ответ на: комментарий от anonymous

Так тебя и попросили показать, что же тебе нужно.

Я показал. Судя по твоему ответу, ты не понял. Читать вводный курс по ФП мне лень.

tailgunner ★★★★★
()
Ответ на: комментарий от Mironor

На самом деле они хотели использовать Скалу, но в то время она еще долго компилировалась

Именно. Более того - они хотели написать собственный компилятор скалы, который бы быстро компилировал (хехе), но ниасилили.

ovk48 ★★★
()
Ответ на: комментарий от tailgunner

Я показал.

Тебе показали, что тоже самое можно написать иначе. Ты сказал что число товаров меньше в твоём варианте, хотя это не так. Это все?

anonymous
()
Ответ на: комментарий от tailgunner

Я уже сказал про токены.

И с каких пор 17 меньше 16ти?

«switch по типу» - это форма паттерн матчинга.

Нет. Это свитч по типу. Паттерн матчинг более сложный и мощный механизм. Вопрос как раз в том, нужен ли он в языке или можно не усложнять.

Котлин определенно сложнее Явы.

А по-моему проще.

anonymous
()
Ответ на: комментарий от anonymous

Ты сказал что число товаров меньше в твоём варианте, хотя это не так

В «x.left» меньше токенов, чем «left»?

Это все?

См. здесь, два последних предложения.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Он сказал что они его активно делают, используют внутри компании (ну и презентацию он делал чтобы больше людей привлечь). Сказал что если год назад почти никто не говорил о Котлине, то уже намного больше людей приходят, интересуются, говорят что делают проекты на нем.

Mironor
()
Ответ на: комментарий от tailgunner

В «x.left» меньше токенов, чем «left»?

Нет. Но в is Parent меньше токенов, чем в is Parent(left, right). И последний, на мой взгляд, менее наглядно, т.к. сложные паттерны сложно читаются. А тут только имя типа. Кроме того, в случае не чистого ФП, нам важна не только структурная декомпозиция, но и возможность вызова произвольных методов.

anonymous
()
Ответ на: комментарий от foror

Ну в Go, тоже считают, что нужно каждую ошибку проверять и говорят, что это даже фича.

В Го есть паника и на checked exceptions она совсем не похожа.

DarkEld3r ★★★★★
()
Ответ на: комментарий от stevejobs

и вообще имхо это фича. fine-grained performance control. особенно что касается многопоточности. Пердолиться с многопоточностью - это основная задача джавы :)

Разве иммутабельность не выставляют как преимущество (одно из) как раз для многопоточности?

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Писать иммутабельное удобно. А жрёт оно как слон. По сравнению с байтоёбством, которое можно устроить на с++ и java, коли знать толк в извращениях. Всегда ваш кэп

stevejobs ★★★★☆
()

Да, пожалуй лучшая замена java без выкрутасов. Вот только поддержка таки не очень. Ресурсов выделяется, как я понимаю, не так много. Сообщество не такое, как у Scala.

forCe
()
Ответ на: Форсинг и реклама поделий от "джетбрейнс"? от Bioreactor

Странно, у меня два мака, и на обоих прекрасно выглядят и работают и IDEA, и Pycharm, и Webstorm. Выглядят почти как нативные приложения. Гораздо лучше, чем на винде, и уж тем более на Linux дистрах. «Работают как говно» - нужно уточнять у кого и на чём работают. А то так можно вякнуть " java говно и работает как говно, всё тормозит/жрёт" и такой вяк всегда найдёт поддержку у людей, у которых проблемы с техникой/деньгами, апгрейдами или прямыми руками.

menangen ★★★★★
()
Ответ на: комментарий от forCe

Вот только поддержка таки не очень. Ресурсов выделяется, как я понимаю, не так много. Сообщество не такое, как у Scala.

20 человек сейчас работают над этим проектом по словам CEO.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Но, как мне кажется, они пока не нацелены на какое-то большое сообщество и активное развитие...

forCe
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.