В чем преимущество создания однострочной функции, содержащей строку, которую невозможно было бы получить, просто назначив строку переменной? - PullRequest
0 голосов
/ 06 июня 2019

В Kotlin я понимаю, что строка может быть назначена функции напрямую, например:

fun foo(): String = "Hello World"

Но вы также можете напрямую присвоить строку переменной:

var foobar: String = "Hello Word"

Мой вопрос: зачем вам создавать функцию, когда вы можете просто создать переменную? Я не вижу смысла в существовании этой функциональности.

Ответы [ 3 ]

2 голосов
/ 06 июня 2019

Интересная вещь о

fun foo(): String = "Hello World"

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

fun foo(): String {
    return "Hello World"
}

Хотя простой возврат константы не очень полезен, использование синтаксиса выражений, избегая операторов {block} и return, позволяет гораздо более краткие определения функций в случае, когда вся функция может быть выражена в одном выражении.

Например, если foo() был метод в классе, вы могли бы сказать привет со свойством этого класса:

class Hello(var what : String = "World") {
    fun foo(): String = "Hello, $what!"
}

fun main() {
    val hello = Hello()
    println(hello.foo())

    hello.what = "Universe"
    println(hello.foo())
}

Это печатает:

Hello, World!
Hello, Universe!
0 голосов
/ 06 июня 2019

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

Ну, имя функции находится всего на один уровень выше выражения.Это еще более верно в языке, столь же выразительном, как kotlin, где одна строка может легко быть эквивалентна нескольким строкам Java.

Если вы говорите исключительно о строках или примитивах, тогда да, атрибут является более естественнымвыбор, чем функция.

0 голосов
/ 06 июня 2019

Это больше о том, когда отдавать предпочтение свойству v / sa.

Соглашения о кодировании Kotlin содержит раздел, который описывает это.

Свойство должно быть предпочтительнымнад функцией, когда -

  • базовый алгоритм не выбрасывает
  • значение дешевое для вычисления (или вызывается при первом запуске)
  • возвращает тот же результат в течениевызовы, если состояние объекта не изменилось

С точки зрения прецедента API, в некоторых случаях предоставление функции вместо свойства может быть хорошей идеей, поскольку это дает вам возможность изменитьреализация этого API в будущем.То, что может быть жестко заданным значением сегодня, может быть заменено кодом, который вычисляет значение в будущем.

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