Spec-Zone.ru › Kotlin 1.9

Введение

Хорошая библиотека должна обладать:

  • Обратной совместимостью

  • Полной и легкопонимаемой документацией

  • Минимальной когнитивной сложностью

  • Согласованным API

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

  • Читаемость

  • Предсказуемость

  • Отлаживаемость

  • Обратная совместимость

Многие из последующих лучших практик предоставляют рекомендации по снижению когнитивной сложности API. Поэтому перед переходом к лучшим практикам, в данном руководстве приводится объяснение когнитивной сложности.

Когнитивная сложность

Когнитивная сложность — это количество умственных усилий, необходимых человеку для понимания фрагмента кода. Код с высокой когнитивной сложностью сложнее понять и поддерживать, что может привести к ошибкам и задержкам в разработке.

Пример высокой когнитивной сложности — это класс или модуль, не соблюдающий принцип единственной ответственности. Класс или модуль, выполняющий слишком много задач, трудно понять и изменить. В отличие от этого, класс или модуль с одной четкой и хорошо определенной ответственностью проще использовать.

Функции также могут иметь высокую когнитивную сложность. Некоторые характеристики «плохо написанной» функции:

  • Слишком много аргументов, переменных или циклов.

  • Сложная логика с множеством вложенных операторов if-else.

Такая функция сложнее в использовании, чем функция с четкой и простой логикой — с небольшим количеством параметров и понятным потоком управления. Пример высокой когнитивной сложности:

fun processData(
    data: List<String>,
    delimiter: String,
    ignoreCase: Boolean,
    sort: Boolean,
    maxLength: Int
) {
    // Some complex processing logic
}

Разбиение этой функциональности снижает когнитивную сложность:

fun delimit(data: List<String>, delimiter: String) { … }
fun ignoreCase(data: List<String>) { … }
fun sortAscending(data: List<String>) { … }
fun sortDescending(data: List<String>) { … }
fun maxLength(data: List<String>, maxLength: Int) { … }

Вы можете еще больше упростить код с помощью расширяющих функций:

fun List<String>.delimit(delimiter: String): List<String> { … }
fun List<String>.sortAscending(): List<String> { … }
fun List<String>.sortDescending(): List<String> { … }
fun List<String>.maxLength(maxLength: Int): List<String> { … }
…

Что дальше?

Узнайте больше о читаемости API.

Последнее изменение: 25 июля 2023 г.
Руководство по обработке null в Java и Kotlin Читаемость

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-api-guidelines-introduction.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API