From c3ede7266f1ed850ecd2b04acc17d8fbcbaa8ca5 Mon Sep 17 00:00:00 2001 From: Vasili Chyrvon Date: Wed, 27 Apr 2022 18:51:47 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20?= =?UTF-8?q?=D1=81=20expression=20body?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Убрать запрет на использование многострочных - Добавить требование явного указания типов Unit и Nothing --- README.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ba174f0..ff9ebfd 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,61 @@ private val promoItem: MarkPromoItem by lazy { ``` # Функции -## Функции с одним выражением -- Позволительно использовать функцию с одним выражением только в том случае, если она помещается в одну строку. +## Функции с одним выражением (expression body) +- Обязательно указываем типы Unit и Nothing явно. +- Указание остальных возвращаемых типов – на усмотрение разработчика. +- Для случаев с Unit или Nothing рекомендуется предпочесть функцию с block body. +- Перенос строк по правилу из гайда https://kotlinlang.org/docs/coding-conventions.html#expression-bodies. +- Никакого дополнительного форматирования не требуется, обычные правила. +- Стоит понимать, что это в первую очередь функция выполняющая expression и возвращающая его результат (явное указание типов Unit и Nothing позволяет видеть когда expression body функция используется для side-effect'а и избежать ошибок выведения неверных типов). + +Все примеры ниже валидны: +```kotlin +fun expressionFun() = when(something) { + // ... Value. +} + +// Оr wrapped after '='. +fun expressionFun2() = + when(something) { + // ... Value. + } + +fun expressionFun3() = if (isSomething) { + // ... Value. +} else { + // ... Value. +} + +fun expressionFun4() = + if (isSomething) { + // ... Value. + } else { + // ... Value. + } + +// Unit type must be explicit +fun expressionFun5(): Unit = with(something) { + // ... Side-effect. +} + +// Unit type must be explicit +fun expressionFun6(): Unit = + with(something) { + // ... Side-effect. + } + +// Nothing type must be explicit +fun expressionFun7(): Nothing = when(something) { + // ... Never returns. +} + +// Nothing type must be explicit +fun expressionFun8(): Nothing = + when(something) { + // ... Never returns. + } +``` ## Именованные аргументы - Если по контексту не понятно назначение аргумента, то следует сделать его именованным. From b7c317b6d3d793e98b43dd898c6db95195cc9e9b Mon Sep 17 00:00:00 2001 From: Vasili Chyrvon Date: Mon, 16 May 2022 12:24:21 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20=D0=B2=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=20=D0=B0=D0=B4=D1=80=D0=B5=D1=81=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D0=B0=20=D0=B2=20exp?= =?UTF-8?q?ression=20body=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff9ebfd..75f2cc6 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ private val promoItem: MarkPromoItem by lazy { - Обязательно указываем типы Unit и Nothing явно. - Указание остальных возвращаемых типов – на усмотрение разработчика. - Для случаев с Unit или Nothing рекомендуется предпочесть функцию с block body. -- Перенос строк по правилу из гайда https://kotlinlang.org/docs/coding-conventions.html#expression-bodies. +- Перенос строк [по правилу из официального гайда](https://kotlinlang.org/docs/coding-conventions.html#expression-bodies). - Никакого дополнительного форматирования не требуется, обычные правила. - Стоит понимать, что это в первую очередь функция выполняющая expression и возвращающая его результат (явное указание типов Unit и Nothing позволяет видеть когда expression body функция используется для side-effect'а и избежать ошибок выведения неверных типов).