{{notification.text}}

MirGames

10.09.16 22:06
0

Всем привет! :-) Я тут неплохо отравился и, вместо того, чтобы чувствовать боль, наоборот, чувствую себя свежо и сплю по 4-5 часов :-) Очень странно. Но куда более странно восприятие мною стилей программирования в последнее время.

Kotlin

Когда вышел такой замечательный язык, как Kotlin, мне показалось, что он ну очень хорош - там есть extension-функции и лямбды, алгоритмы на коллекциях (fold, map, flatMap, filter, и прочее). В общем, очень удобно. Есть такая штука, как Data classes. Вот пример:
Kotlin data class Point(x: float = 0, y: float = 0);Kotlin

inline-функции. Ну и прочее-прочее.

Быдлокод

Тем не менее, я ещё фрилансирую и очень часто меня просто вызывают на час-два просто пофиксить какую-то ошибку или дописать функционал. Я работаю либо просто с довольно "простым" кодом, либо вообще с декомпилированным через TeamViewer. И, как бы ни было странно, в "быдло"-коде я делаю функционал гораздо быстрее, чем в своём "хорошем". Поэтому, как бы мне ни было грустно расставаться с чувством красоты, мне кажется, я скоро окончательно избавлюсь от Kotlin'а в сторону Java, либо буду писать на Kotlin'е как на Java, добровольно отказавшись от некоторых его фишек.

Причины, по которым я выбираю "Быдлокод"

Их много, но, например:
1. type inference имеет один минус: я не вижу типа. Банально, конечно, но, оказывается, если хочется обойти дерево файлов, то возвращается Sequence, а не List (что логично). Не помню подробностей недавней утилиты, но так оно дальше и покатилось - Sequence через Sequence ("ленивая структура данных"). В итоге, я вылетел из памяти по непонятным, на первый взгляд, причинам. Меня вообще не напрягают явные типы в Java. Да-да. Мне всё равно на эти большие конструкции - в 99% случаев я их просто пропускаю, не отдавая им внимания. А если там написано что-то неверное, то могу и заметить. Я не пишу эти конструкции, не трачу на них время. Я просто жму cmd + alt + v и всё! =) Всё пишется само. Избытычность не мешает, даже помогает.
2. Когда я программирую на супер-пупер высокоуровнем языке (Kotlin) он должен работать идеально. Он, чуть ли, не сам программы писать должен. Потому что, если есть какая-то высокоуровневая конструкция, которая работает неидеально, то я даже не могу её сразу увидеть и должен проходиться отладчиком.
3. смотрю на Kotlin - в нём не хватает фич. Смотрю на Scala - не хватает скорости компилятора. В итоге, имхо, лучше уж писать на Java, чем иметь ни то, ни сё. Взять те же data-classes. Что будет, если я захочу исключить какое-то поле из toString? Пример простой: у меня есть дерево, у его узла есть parent и children[]. Что-то я, да захочу исключить - иначе вывод строки зайдёт в рекурсию. Ок, что мне предлагают сделать? Правильно, переписать toString() самому. И, вот, data-классы уже не такие уж и красивые.
4. Надо слишком много думать. Да, я, наверное, не очень быстро думаю. Особенно, когда речь заходит о выборе, который почти ничего не значит и его надо просто сделать случайным образом.

Вопросы, которые не нужны и которые мешают

Позволю себе раскрыть это чуть подробнее. Есть список вопросов, которые меня заставляют просто зависнуть на несколько секунд:
1. Надо ли стирать это бельё? Если я выбил много кофе, то я становлюсь дерзким и сразу спрашиваю "зачем"? Мне говорят, про какое-то пятно и я тогда говорю, что да, стирать надо. Но, чаще всего, всё происходит не так: я думаю, хм, а надо ли? Или не надо? Надо? Вроде, норм. *Тут я перехожу в овощное состояние и могу задуматься и о чём-либо ещё". Короче говоря, оба варианта мне - безразличны, а зависаю я над ними надолго
2. Будешь чай? (Именно тогда, когда я его не сам хочу, а мне его предлагает кто-то). Я начинаю думать, ломаться, что-то там прокручивать в голове. Не слишком ли ещё поздно для кофеина, не буду ли я хотеть потом есть. А какого размера кружка - мне же потом в дорогу. И т.д.

Совсем другое дело, если бы меня спросили - давай я тебе сегодня долг верну? Ответ на этот вопрос возникает сам собой. Нет трудностей с ответом.

Что я вижу плохого в Kotlin'е

К сожалению, красивые языки вроде Kotlin'а порождают много стилистических вопросов. Не неся никакой практической нагрузки (вопрос только стиля), он порождает много неуверенности.

  1. Надо ли писать метод глобально или написать метод в companion object'е?
  2. Надо ли писать data class, или лучше на Java, т.к. стабильно?
  3. "Как бы сделать покрасивше?"
  4. Как бы это сделать на билдерах, чтобы переменную, которая часто встречается, вообще не надо было нигде указывать.
  5. Как extension-методе сохранить произвольную информацию об объекте? (оказалось, что никак)
  6. Стоит ли писать

fun getVelocity() = (x - lastX)/time

или лучше написать

  fun velocity(): float { 
     return (x - lastX) / time 
  }

или лучше вообще

  val velocity: float get() {
      return (x - lastX) / time
  }

И возникают ещё дополнительные проблемы:

  • Почему ORM опять упал? Нужно сделать @JvmField? @JvmStatic? Ещё как-то?
  • А почему десериализатор тогда не упал?
  • А почему резко улетела память непонятно куда?
  • Приложение стало собираться медленно из-за Kotlin/APT/ещё какого-либо фреймворка или из-за моих кривых рук?

И т.д. пишу я это всё, скорее для себя, т.к. попробую продолжать писать на Kotlin'е, но учитывая предыдущие ошибки.

Отредактировано: 10.09.16 22:12
#1
Хранитель Флейма
12.09.16 12:51
0

Мда.

#2
12.09.16 18:09
0

В общем, т.к. рубить сгоряча не хочется, пока для себя решил так:
1. Свойства (properties) использовать тогда, когда есть какая-то сущность, которую можно положить/изъять и никогда иначе. read-only свойства так же можно использовать для любых существительных.
2. data-classes использовать всегда, но всегда быть готовым писать код вручную. Т.е. data class'ы, в основном, при создании приложения. При дальнейшем его развитии быть морально готовым к тому, что код скатывается в Java-подобный.
3. Всегда указывать тип для свойств/функций, но не указывать для локальных переменных. Потому что локальные переменные определяют алгоритм, и там чёткое указание типа вряд ли нужно. А когда открываешь код класса, хочется взглянуть - что же в нём есть.

Это по мелочи.

Мда.

Раскрой, пожалуйста. Очень интересно твоё мнение :-)

Отредактировано: 12.09.16 18:10
#3
Хранитель Флейма
12.09.16 21:41
0

Кек.

#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}