include johns_file.e as john
include bills_file.e as bill
john:x += 1
bill:x += 2
В этом случае глобальная переменная x была объявлена в двух разных файлах, но вы хотите использовать обе переменные в своей программе, не затрагивая исходные файлы. Используя идентификатор пространства имён (префикс, приставку), например, john или bill, вы можете присоединить к x соответствующий префикс, чтобы обозначить, какой именно x вы в данном конкретном случае имеете в виду. Мы иногда говорим в подобных случаях, что john относится к одному пространству имён , в то время как bill относится к другому, отличающемуся от первого, пространству. Вы можете прибавлять префиксы к именам любых переменных, констант или подпрограмм. Вы можете делать это, чтобы погасить реальный конфликт имён, или просто, чтобы сделать вещи более ясными. Имена собственно префиксов имеют местную сцену (в пределах файла). Префикс действует только внутри файла, в котором был объявлен, т.е. в том файле, который содержит соответствующую расширенную команду include. В различных файлах могут быть определены различные префиксы для обозначения одного и того же включенного файла.
Euphoria подталкивает вас к сужению сцены имён. Если бы все имена были автоматически глобальными для всей программы, у вас была бы масса конфликтов имён, особенно в программах, состоящих из файлов, написанных многими разными авторами. Конфликт имён должен вызывать сообщение об ошибке от компилятора, иначе он мог бы вести к очень скрытной ошибке, когда различные части программы встречно и случайно модифицируют одну и ту же переменную, не догадываясь об этом и никак не сигнализируя программисту о творящихся тайных безобразиях. Старайтесь использовать наиболее ограниченную сцену из всех, которые вы можете задать. Делайте переменные частными(только для подпрограммы) везде, где это возможно, а если это невозможно, делайте их местными(только для текущего файла), а не глобальнымидля целой программы.
Когда интерпретатор Euphoria ищет объявление имени, он в первую очередь проверяет текущую подпрограмму, затем текущий файл, а затем глобальные имена из включенных файлов. Имена, которые "более локальны", скажем так, будут затенять те имена, которые "более глобальны". За границей сцены более локального имени, более глобальное имя вновь выходит из тени и вновь становится видимым.
Объявления константдолжны быть вне тела любых подпрограмм. Константы могут быть глобальными или местными (локальными), но не частными.
Объявления частных переменных внутри тела подпрограммы должны записываться в самом начале, сразу после закрывающей скобки списка аргументов, перед любыми другими исполняемыми командами подпрограммы.
Объявления местных имён на уровне файла, вне тела любых подпрограмм, не должны находиться внутри тела команд циклов (for, while) или тела команды ветвления (if).
Управляющая переменная, используемая в команде цикла for, является особым случаем. Она автоматически объявляется перед началом циклических расчётов, и её сцена ограничена телом команды циклa. Если команда цикла расположена внутри тела подпрограммы, переменная цикла является частнойпеременной и должна иметь имя, отличающееся от всех других объявленных частныхпеременных данной подпрограммы (к которым относятся и переменные, объявляемые в списке аргументов). Когда команда цикла находится на уровне файла, вне тела любых подпрограмм, переменная цикла является местной (локальной)переменной и должна иметь имя, отличающееся от всех других уже объявленных местныхпеременных данного файла. Но вы можете использовать одно и то же имя переменной цикла для различных циклов, если циклы не являются вложенными один в другой. Вам не нужно объявлять тип переменной цикла так, как это делается с другими переменными. Диапазон значений переменной цикла, задаваемый в команде цикла, определяет и все её законные значения, следовательно, любое добавочное задание её типа было бы излишним и поэтому не предусмотрено.
2.4.3 Задание типа переменной
Мы уже видели несколько примеров, касающихся типов переменных, но теперь мы дадим типам более развёрнутое и точное определение.
Объявления переменных как таковые записываются в виде имени типа, сопровождаемого списком имён переменных данного типа, которые мы решили объявить как подлежащие дальнейшему использованию в программе. Например,
Читать дальше