Использование математического оператора в начале строки - PullRequest
1 голос
/ 09 апреля 2019

У меня есть базовый вопрос для моих общих знаний о Kotlin относительно математических операторов:

Я писал уравнение и по ошибке поставил знак плюс во вторую строку, из-за чего мое уравнение не работало как напримеры ниже:

val x = 2 + 3 //x = 5 CORRECT

val x = 2 +
    3 //x = 5 CORRECT

val x = 2
    + 3 //x = 2 WRONG

Мой вопрос: почему Kotlin не показывает сообщение об ошибке в последнем примере?Как Котлин интерпретирует строку «+3»?

Ответы [ 2 ]

4 голосов
/ 09 апреля 2019

val x = 2 - правильное выражение, поэтому компилятор использует его как полное выражение.

+ 3 - правильное выражение, хотя оно ничего не делает.

val x = 2 + - это незавершенное выражение - компилятор пытается завершить его, используя следующую строку.

1 голос
/ 09 апреля 2019

Это неудачный результат того, что Котлин принимает точку с запятой в конце строки.

В таких языках, как Java, каждое утверждение должно заканчиваться точкой с запятой, поэтому нет никакой двусмысленности.

Kotlin позволяет пропустить точки с запятой, что может быть удобно. Но он немного перегружен: он выводит по одному в конце каждой строки, что само по себе имеет смысл, игнорируя следующие строки. Это довольно раздражает тех из нас, кто любит ставить операторы в начале строки, а не в конце ...

В большинстве случаев следующая строка сама по себе не имеет смысла, поэтому вы получаете сообщение об ошибке компилятора, чтобы предупредить вас о проблеме. К сожалению, вы нашли один из редких случаев, когда следующая строка является действительной, и поэтому нет ошибки! (У Kotlin есть унарный плюс , чтобы соответствовать его унарному минусу, поэтому +3 - это число, аналогичное -4. И само число является допустимым выражением. Kotlin вычисляет значение, а затем отбрасывает она.)

Решения:

  • Поместите все выражение в одну строку. (Что громоздко, если это долго!)
  • Поставьте оператор в конец предыдущей строки. (Это именно то, чего ожидают разработчики языка, но некоторые из нас находят менее логичным и менее понятным.)
  • Не позволяйте первой строке иметь смысл самостоятельно.

Лучший способ, который я нашел, сделать это с паренами:

val x = (2
         + 3)

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

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