Почему функции Kotlin / Java в реальном использовании отличаются от документации? - PullRequest
0 голосов
/ 10 марта 2019

Например, вот all() в действии:

fun Shop.checkAllCustomersAreFrom(city: City): Boolean =
    customers.all { it.city == city }

А вот эквивалент из документации kotlin :

inline fun <T> Iterable<T>.all(
    predicate: (T) -> Boolean
): Boolean

Может ли кто-нибудь объяснить каждую часть второго блока кода и почему он так написан?

Извиняюсь, если это основной вопрос, но если я изучу это, будет намного легче читать документацию.

Ответы [ 2 ]

4 голосов
/ 10 марта 2019

Давайте разберемся, не так ли?

inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean
|--1--|-2-|-3-|-----4-----|-5-|----6-----|------7-------|----8----|
  1. Эта функция встроенная .Это означает, что его тело по существу копируется в сайт вызова во время компиляции , как мера оптимизации (используется в этом случае, потому что у него есть лямбда-параметр).
  2. Объявляет функцию.
  3. Список параметров типа, эта функция имеет один параметр общего типа с именем T.
  4. Это функция расширения , и это ее получатель, то есть типрасширяетсяЭта функция будет вызываться для любого Iterable<T>, как если бы она была функцией-членом.Iterable, к которому она была вызвана, доступна в теле функции как this.
  5. Имя функции.
  6. Имя первого и единственного параметра функции(если мы не посчитаем получателя, что технически также является параметром).
  7. Тип параметра функции.Это тип функции , который описывает функцию, которая принимает один параметр T и возвращает Boolean.Это может быть ссылка на обычную функцию, имеющую эту сигнатуру, но с такими функциями сбора можно ожидать, что большую часть времени это будет лямбда .
  8. тип возвращаемого значенияфункции.
1 голос
/ 10 марта 2019

inline - возьмите тело этой функции и поместите его туда, где она вызывается при компиляции, вместо вызова функции.

fun - объявление функции

- универсальный тип, называемый T

Iterable - класс, к которому мы также добавляем функцию расширения. (Если это не inline читать статическую функцию)

all - название функции

Предикат - параметр с именем предикат

: (T) -> Boolean - Лямбда-тип принимает T в качестве параметра и возвращает логическое значение. Обычно в форме { it == foo }

: Boolean - Возвращает логическое значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...