Котлин - локальные переменные против глобальных переменных - PullRequest
0 голосов
/ 16 февраля 2019

Вы можете объявить локальную переменную без инициализации или добавления lateinit, но это не относится к глобальной переменной, мой вопрос: почему?почему компилятор также не выдает ошибку для локальной переменной?

, например:

class A{

    var abc : String  // this is not allowed by compiler

    fun myOwnedFun(){
       var abcd : String // this is allowed 
    }

}

Я понимаю, что одно разрешено, а другое - нет, но мне любопытно, почему.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019
class A{

    var abc : String  // throws compile time error

    fun myOwnedFun(){
       var abcd : String // throws compile time error while accessing it
       abcd. // throws error now, suggests you to initialize it.
    }

}

Это потому, что Kotlin построен как нулевой безопасный язык, что означает, что все переменные должны быть инициализированы перед его использованием, либо как nullable, к которому следует добавить суффикс ? и присвоить null, либо по умолчаниюконструктор для любых других классов, или используйте lateinit var, если вы уверены, что будете назначать его где-то перед первым доступом к нему.

В Android Kotlin, lateinit var широко используется для глобальных переменных, которые будут назначаться в методах жизненного цикла, таких как onCreate() и т. Д.,

0 голосов
/ 16 февраля 2019

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

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

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