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 .