Пример, который вы приводите, не является двусмысленным; это может иметь только одно разумное значение. И это довольно сильно отличается от проблемы, на которую вы ссылаетесь (которая вообще не включает в себя пункты else
). Поэтому я не уверен, что вы спрашиваете.
Kotlin похож на большинство C-подобных языков в том, как он интерпретирует if
(и else
). Строго говоря, ошибка такого типа все еще возможна. Но у Kotlin есть две особенности, которые могут снизить риск возникновения таких проблем.
Во-первых, в отличие от C и Java и подобных языков, if
может использоваться как выражение (возвращающее значение). При таком способе компилятор гарантирует, что каждая ветвь возвращает значение; это обычно приводит к ошибке компилятора, если есть путаница вокруг нескольких ветвей.
Вторым является структура when
, которая работает как оператор C / Java switch
, но избегает провалов и, следовательно, необходимости в break
s; его также можно использовать в качестве выражения, обеспечивающего один проход и одно возвращаемое значение.
Так что в Kotlin, связанный код лучше всего написать с when
, который был бы проще, а также предотвращал бы этот тип ошибки.
В конечном счете, я не думаю, что это действительно сопоставимо. Связанный код является низкоуровневым C, который имеет очень отличающиеся методы и ограничения от общего кода приложения. В частности, использование goto
для устранения ошибок по своей природе подвержено ошибкам. И если бы они правильно использовали ветви else
, это сделало бы код более понятным и предотвратило бы эту ошибку.
Можно написать плохой код на любом языке, если вы достаточно решительны! Хороший язык - это язык, который облегчает написание хорошего кода и труднее написание плохого кода. (И я думаю, что Котлин в этом отношении очень хорошо забивает.)