Не позволяйте функции единственного выражения Kotlin разрушить ваш бизнес😲

Береги себя, продолжай строить!

Здравствуйте, разработчики 👋! Это мини-блог, в котором мы увидим, как небольшая ошибка может привести к запутанной и серьезной проблеме.

Kotlin предоставляет нам возможность определять функции с одним выражением для одноразовых операций. Например, мы делаем что-то вроде этого 👇

Тип возврата вышеуказанной функции будет типом возврата результата findItemById(), верно? В функции с одним выражением нам не нужно указывать тип возвращаемого значения, поскольку он автоматически определяется компилятором Kotlin.

Настоящая проблема 😬

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

Теперь давайте поймем, как наша ошибка может привести к проблемам. Так что обратитесь к приведенному ниже коду.

Что? Просто доброе утро? Почему Добрый день не печатается?

Вы можете выполнить этот код, нажав здесь

Как? 🤔

Вы заметили = {} в greetGoodAfternoon() функции? Так вот откуда проблема. Давайте разберемся в проблеме.

Так что ни один разработчик не будет писать такой код намеренно. Это может быть похоже на то, как мы вводим опечатки! Как мы знаем, в функции с одним выражением возвращаемый тип функции автоматически определяется компилятором (если не указан явно). Когда мы пишем = {}, его возвращаемый тип определяется внутренне как 👇

Да, это подразумевается как лямбда-блок 😅. Итак, когда мы вызвали greetGoodAfternoon(), он вернул лямбду! Если мы вызовем greetGoodAfternoon().invoke() или greetGoodAfternoon()(), он будет выполнен (Потому что теперь вы знаете, что произошло 😄).

Примечание. IntelliJ IDEA или Android Studio предупредит вас, если вы сделаете такие ошибки. Но даже после этого, если вы проигнорируете это, никто не сможет вам помочь.

Решение 💡

Мы люди! Мы всегда будем ошибаться, но это нормально. Ошибка, которую мы сделали выше (= {}), не может быть решена вручную. Но есть некоторые уроки, благодаря которым мы можем избежать других связанных с этим проблем.

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

Таким образом, мы можем быть уверены, что эта функция возвращает Item. Если нет, то компилятор вам поможет. Это делает код более читабельным, и мы также можем быть уверены в этом, просто прочитав его (например, какая именно функция возвращает). Это также может помочь рецензенту при проверке кода на GitHub 😎.

Для простого однострочного вызова, который ничего не возвращает, это нормально 👇

Нет сомнений в том, что Kotlin сделал жизнь разработчика простой и легкой. Но делать такие ошибки может каждый.

Итак, окончательный вывод 👇

Упоминайте возвращаемый тип функции явно и сделайте это привычкой!

Если вам понравилась эта статья, поделитесь ею со всеми! Может быть, это поможет кому-то, кому это нужно.

Спасибо 😃