В этом руководстве мы познакомимся с несколькими способами получения имени текущей выполняемой функции в Kotlin. Первый способ является наиболее идиоматичным, если мы используем Java 9. Помимо него, мы также рассмотрим несколько «хакерских» подходов, которые работают, но имеют свои недостатки.
Java 9 представила API Stack-Walking — для ленивого обхода кадров стека текущего потока. Этот API обеспечивает более эффективный обход, так как не захватывает все кадры сразу (что ресурсоёмко) и не создает лишние объекты или классы, в отличие от альтернативных решений. Верхний кадр стека представляет последнюю вызванную функцию. Мы можем использовать этот API, чтобы получить имя функции из верхнего кадра: fun functionNameWithStackWalker(): String? {
return StackWalker.getInstance().walk { frames ->
frames.findFirst().map { it.methodName }.orElse(null)
}
} Метод walk() принимает функцию, которой передаётся поток StackFrame-ов. Таким образом, мы можем лениво обходить стек кадр за к