Урок 6

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

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

На втором уроке мы научились пользоваться встроенными функциями sqrt и pow. Сейчас в качестве примера создадим функцию, которая вычисляет расстояния между двумя точками на плоскости. Сначала напишем скрипт, который делает это без функции:

# вычисляем расстояние между двумя точками на плоскости
array A1[2]float=(2,1) # координаты X,Y первой точки
array A2[2]float=(6,4) # координаты X,Y второй точки
dx=(A2[1]-A1[1])
dy=(A2[2]-A1[2])
R=math_square_root(dx*dx+dy*dy)
stop

Проверяем работоспособность скрипта

Расстояние между двумя точками

Получили: расстояние между точками равно 5. Расчет расстояния между точками целесообразно оформить в виде функции. Функция может выглядеть, например, так

Function Distance(_A1,_A2)
  _dx=(_A2[1]-_A1[1])
  _dy=(_A2[2]-_A1[2])
  _R=math_square_root(_dx*_dx+_dy*_dy)
  return _R

Пояснения: После ключевого слова «Function» через пробел должно следовать название функции, в нашем случае это название – «Distance». После названия функции могут следовать заключенные в круглых скобках так называемые «формальные параметры» функции. Нижерасположенные строки образуют «тело функции» и должны иметь отступ 2 позиции (или более, если в теле функции будут использоваться операторы управления). Тело функции должно заканчиваться ключевым словом «return».

Формальные параметры (_A1, _A2) и переменные, определяемые в теле функции (_dx, _dy, _R ), должны начинаться с символа подчёрк «_». Этот признак позволяет отличать переменные, создаваемые в основном теле скрипта, которые называемые глобальными переменными, и переменные, создаваемые в теле функций, которые называются локальными переменными. Локальные переменные существуют только при погружении в тело функции. При выходе из тела функции они удаляются. Глобальные переменные можно использовать в любой части программы, в том числе и в теле скриптовых функций. Удаляются глобальные переменные только при рестарте скрипта или загрузке нового скрипта.

За ключевым словом «return» может следовать выражение, переменная или константа значение которого будет возвращаемым значением, т.е. результатом срабатывания функции. В теле функции может быть несколько ключевых слов «return» в разных местах.

Так выглядит скрипт, который вычисляет расстояние между точками, используя скриптовую функцию Distance:

# вычисляем расстояние между двумя точками на плоскости
array A1[2]float=(2,1) # координаты X,Y первой точки
array A2[2]float=(6,4) # координаты X,Y второй точки
R1=Distance(A1,A2)
stop 

Function Distance(_A1,_A2)
  _dx=(_A2[1]-_A1[1])
  _dy=(_A2[2]-_A1[2])
  _R=math_square_root(_dx*_dx+_dy*_dy)
  return _R

В строке вызова функции «R1=Distance(A1,A2)» переменные A1 и A2 называются фактическими параметрами. Наберите в программе размещённый выше скрипт, или перенесите его в программу ч/з буфер обмена. Сплиттер между таблицами «Глобальные переменные» и «Локальные переменные» (тёмно-серая вертикальная полоска - разделитель) передвиньте с помощью мышки на середину (наведите мышку, нажмите левую кнопку и, не опуская, переместите к центру, и там отпустите).

Пройдите весь скрипт в шаговом режиме. Следите за таблицами глобальных и локальных переменных.

Расстояние между двумя точками

При достижении 10-й строки в таблице «локальные переменные» отображаются все переменные, присвоенные внутри функции Distance. При выполнении следующего шага происходит выход из функции, все локальные переменные уничтожаются и таблица «локальные переменные» становится пустой.

Скриптовая функция может не иметь возвращаемого значения. В следующем скрипте:

# вычисляем расстояние между двумя точками на плоскости
array A1[2]float=(2,1) # координаты X,Y первой точки
array A2[2]float=(6,4) # координаты X,Y второй точки
R1=0
Distance(A1,A2)
stop 

Function Distance(_A1,_A2)
  _dx=(_A2[1]-_A1[1])
  _dy=(_A2[2]-_A1[2])
  R1=math_square_root(_dx*_dx+_dy*_dy)
  return

вычисляемое в теле функции расстояние присваивается непосредственно глобальной переменной R1, и за командой return возвращаемое значение отсутствует. Такой подход является менее предпочтительным, т.к. функция теряет универсализм и не может быть использована в другом скрипте с иными глобальными переменными.