Kotlin и контракты

kotlin

Это небольшая статья, рас­ска­зыва­ет о том, как сде­лать код при­ложе­ния чище, исполь­зуя Contract API язы­ка Kotlin.

РЕКОМЕНДУЕМ:

Пред­ста­вим, что у нас есть сле­дующая фун­кция:

Она поз­воля­ет нам писать такой код:

Вмес­то такого:

if (name == null) { ... }

Од­нако есть неболь­шая проб­лема. Сле­дующий код вызовет ошиб­ку ком­пилято­ра и пре­дуп­режде­ние сре­ды раз­работ­ки о том, что в треть­ей стро­ке про­исхо­дит обра­щение к nullable-перемен­ной:

Так про­исхо­дит потому, что ана­лиза­тор кода в сре­де раз­работ­ки и ком­пилято­ре не в сос­тоянии опре­делить, что в треть­ей стро­ке name гаран­тирован­но не может быть null.

К счастью, мы можем это испра­вить, исполь­зуя кон­трак­ты:

От пре­дыду­щей реали­зации дан­ная фун­кция‑рас­ширение отли­чает­ся появив­шимся бло­ком contract. Он как раз и дает ана­лиза­тору кода под­сказ­ку, что если воз­вра­щаемое этой фун­кци­ей зна­чение рав­но false, то текущий объ­ект не равен null.

Это толь­ко один при­мер исполь­зования кон­трак­тов. В биб­лиоте­ке Kotlin есть мно­жес­тво дру­гих при­меров, вклю­чая фун­кцию requireNotNull. Исполь­зовать ее мож­но так:

А код фун­кции выг­лядит так:

Это выжимка статьи Using Kotlin’s Contract APIs for Smarter Helper Functions

Понравилась статья? Поделиться с друзьями:
Добавить комментарий