Функции¶
Комментарий к форматированию. согласно конвенции в котлин фигурная скобка функции открывается на той же строке, где функция декларирована — https://kotlinlang.org/docs/coding-conventions.html#formatting
Как правило для таких функций есть более свежие, более удобные и лучше читаемые альтернативы в виде экстеншн функций. Более современными инструментами в принципе нормально пользоваться) Здесь я бы использовал экстеншн получения рандомного числа из диапазона: `(1..10).random()`
Функции всегда обосабливаются пустыми строками-разделителями сверху и снизу. Так их гораздо легче идентифицировать в файлах с большим количеством кода.
В Kotlin, как и в большинстве других языков программирования, принято использовать глаголы в инфинитиве для названия функций, которые выполняют некоторые действия. Поэтому лучше назвать функцию так, чтобы звучало лаконично и отражало суть выполняемого действия.
На будущее: комментарий про аргументы функции `main()`. Нам они пока не нужны (понадобятся только на курсовом проекте для токена бота).
Поэтому для чистоты кода предлагаю оставлять их пустыми в следующих тасках.
Функции в классах следует группировать (по возможности) по модификатору, чтобы код выглядел чище. Например, если в классе разные функции, то сначала могут идти абстрактные, потом публичные простые, в конце приватные.
Вложенные функции¶
Хоть и языком не запрещено объявлять функцию внутри другой функции - это все таки не очень распространенная практика в продакшене и я так делать не рекомендую. Такая вложенность плохо влияет на читабельность, особенно, когда будет большой объем кода.
Давай не будем делать **методы ради методов**) Посыл я понял, но все таки следует функции объявлять и вызывать с умом. Здесь было достаточно разместить весь код метода в основной main функции без дополнительных оберток.
Когда в println вызывают функцию без возвращаемого значения
Сначала у тебя вызываются методы внутри println именно поэтому не выводится Initial user info: в первый раз
Затем происходит работа метода println который выводит то, что находится в нем, из-за этого во второй раз будет распечатан результат выполнения функции, но поскольку функции ничего не возвращают, будет выведено Unit в консоль
Unit - означает что функция ничего не возвращает, по сути является аналогом void в Java
Нейминг функций¶
В Kotlin, как и в большинстве других языков программирования, принято использовать глаголы в инфинитиве для названия функций, которые выполняют некоторые действия. Поэтому лучше назвать функцию так, чтобы звучало лаконично и отражало суть выполняемого действия.
Согласно [конвенции](https://kotlinlang.org/docs/coding-conventions.html) стиля Kotlin методы следует именовать в инфинитиве. Чтобы только по названию было сразу понятно, что это некая функция (то есть будет произведено действие).
Если мы хотим что-то получить из функции, принято в названии дописывать `get`. Если задать какое-то значение какому-либо объекту, то `set`.
Экстеншен¶
Когда применять экстеншен функцию?
- В случае с random хороший вариант, когда нужно получить рандомное значение из диапазона или коллекции, например
- Для коллекций можно использовать различные функции типа forEach, forEachIndexed, map и т.д
Чтобы узнать, какие экстеншн функции есть для типа, с которым работаем, можно поставить точку и смотреть что есть в выпадающем списке, как правило, по названию можно понять что делает функция, но иногда можно загуглить)
А в целом, на то они и "экстеншен" чтобы расширять имеющийся функционал, делать код лаконичнее. Но в 100% случаях есть способ их не использовать, а обходиться простыми конструкциями. Вместо forEach / filter и т.д. использовать простой цикл for. Вместо range.random() простой Random.nextInt() и так далее. С ними просто удобнее