Введение
Хорошая библиотека должна обладать:
Обратной совместимостью
Полной и легкопонимаемой документацией
Минимальной когнитивной сложностью
Согласованным 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.
© 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