Перейти к основному содержимому

Область действия переменной Groovy

· 4 мин. чтения

1. Введение

В этом уроке мы поговорим о том, как работать с различными областями Groovy , и посмотрим, как мы можем использовать преимущества ее области переменных.

2. Зависимости

В дальнейшем мы будем использовать зависимости groovy-all и spock-core.

dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.13'
testCompile 'org.spockframework:spock-core:1.1-groovy-2.4'
}

3. Все прицелы

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

Мы увидим, что означают эти области видимости, и для проверки запустим скрипты Groovy . Для запуска скрипта нам нужно всего лишь запустить:

groovy <scriptname>.groovy

3.1. Глобальные переменные

Самый простой способ создать глобальную переменную в сценарии Groovy — назначить ее в любом месте сценария без каких-либо специальных ключевых слов. Нам даже не нужно определять тип:

x = 200

Затем, если мы запустим следующий отличный скрипт:

x = 200
logger = Logger.getLogger("Scopes.groovy")
logger.info("- Global variable")
logger.info(x.toString())

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

3.2. Доступ к глобальным переменным из области действия функции

Другой способ доступа к глобальной переменной — использование области видимости функции:

def getGlobalResult() { 
return 1 + x
}

Эта функция определена в сценарии области. Мы добавляем 1 к нашей глобальной переменной x .

Если мы запустим следующий скрипт:

x = 200
logger = Logger.getLogger("Scopes.groovy")

def getGlobalResult() {
logger.info(x.toString())
return 1 + x
}

logger.info("- Access global variable from inside function")
logger.info(getGlobalResult().toString())

В результате мы получим 201. Это доказывает, что мы можем получить доступ к нашей глобальной переменной из локальной области видимости функции.

3.3. Создание глобальных переменных из области действия функции

Мы также можем создавать глобальные переменные внутри области действия функции. В этой локальной области, если мы не используем ключевое слово при создании переменной, мы создадим ее в глобальной области. Давайте тогда создадим глобальную переменную z в новой функции:

def defineGlobalVariable() {
z = 234
}

и попробуйте получить к нему доступ, запустив следующий скрипт:

logger = Logger.getLogger("Scopes.groovy")

def defineGlobalVariable() {
z = 234
logger = Logger.getLogger("Scopes.groovy")
logger.info(z.toString())
}

logger.info("- function called to create variable")
defineGlobalVariable()
logger.info("- Variable created inside a function")
logger.info(z.toString())

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

3.4. Неглобальные переменные

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

В частности, мы рассмотрим определение ключевого слова . Таким образом, мы определяем эту переменную как часть области, в которой выполняется поток.

Итак, давайте попробуем определить глобальную переменную y и локальную переменную функции:

logger = Logger.getLogger("ScopesFail.groovy")

y = 2

def fLocal() {
def q = 333
println(q)
q
}

fLocal()

logger.info("- Local variable doesn't exist outside")
logger.info(q.toString())

Если мы запустим этот скрипт, он потерпит неудачу. Причина сбоя в том, что q является локальной переменной, которая принадлежит области действия функции fLocal . Поскольку мы создаем q с ключевым словом def , мы не сможем получить к нему доступ через глобальную область видимости.

Очевидно, мы можем получить доступ к q с помощью функции fLocal :

logger = Logger.getLogger("ScopesFail.groovy")

y = 2

def fLocal() {
def q = 333
println(q)
q
}

fLocal()

logger.info("- Value of the created variable")
logger.info(fLocal())

Итак, теперь мы видим, что хотя мы и создали одну переменную q , эта переменная больше недоступна в других областях. Если мы снова вызовем fLocal , мы просто создадим новую переменную.

4. Вывод

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

Как всегда, полный исходный код примеров доступен на GitHub .