Улучшаем код («Программируем на Actionscript 3.0» часть 2)
Всем привет! Сегодня я расскажу о новых конструкциях языка, а также мы немного оптимизируем код из прошлого урока. Пока забудем и о коде и поговорим о сложных типах данных, таблица таких типов данных находится в середине статьи прошлого урока. Что же такое сложные типы данных? С логической точки зрения, сложный тип данных — это набор простых типов данных. А физически… на самом деле все типы данных Actionscript 3.0, даже простые — объекты! Получается очень интересная вещь — мы фактически работаем с набором компонентов лишь одного типа — объекты. Универсально, не правда ли? И не только универсально, но и очень мощно.
Для начала давайте вспомним код который мы получили к концу прошлого урока:
stop(); function decideEquation(a,b,c){ var d = Math.pow(b,2)-4*a*c; if (d>0){ trace((-b+Math.sqrt(d))/(2*a)); trace((-b-Math.sqrt(d))/(2*a)); } else if(d==0){ trace(-b/(2*a)); } else{ trace("equation haven't root"); } } decideEquation(2,4,5);
Сразу бросается в глаза то что функция ничего не возвращает. В большинстве случаев функции являются важным вычислительным звеном программного обеспечения, которые принимают входные данные и выдают результат. Чтобы функция вернула результат нам необходимо использовать конструкцию:
return [<выражение>];
Где выражение — опциональный параметр, который может быть переменной любого типа, а может отсутствовать. Оператор используется как точка возврата к выполнению кода следующего за вызовом функции и может также вернуть значения, полученные внутри функции. Как раз то, что нам нужно. Одно но! Нам нужно будет познакомиться с массивами, так нам нужно будет возвращать либо одно, либо 2 значения. Массив — составная структура данных, объединяющая несколько элементов в список. В языке ActionScript элементом списка могут быть любые элементы, причем даже разных типов:
var digitArray = [1,2,3,4]; // можно создать массив элементов как одного типа var mixedArray = ['some string',2, new MovieClip()]; // так и разных типов var someArrayyet = new Array(2,34,'you can use this method'); // можно и так создавать массив
Обратите внимание, что мы можем использовать как литерал массива ([]), так и конструкцию new Array(), где Array — конструктор массива (т. к. массив — фактически объект!). Теперь у нас есть все необходимое, чтобы модифицировать наш код таким образом:
stop(); function decideEquation(a,b,c){ var d = Math.pow(b,2)-4*a*c; if (d>0){ return [(-b+Math.sqrt(d))/(2*a),(-b-Math.sqrt(d))/(2*a)]; } else if(d==0){ return [-b/(2*a)]; } else{ return null; } } trace(decideEquation(2,10,5));
Вот и все. У нас всего один вывод и мы выводим результат функции. Единственное неудобство — это то, что нам нужно поэлементно перебирать массив, чтобы работать с каждым его элементом отдельно. Забегу вперед и расскажу о цикле for each (циклы рассмотрим в одном из следующих уроков). Синтаксис его таков:
for each(<элемент> in <последовательность>){ <выражение> }
То есть для каждого элемента в последовательности выполняем необходимые выражения. В итоге наша программа примет следующий вид:
stop(); function decideEquation(a,b,c){ var d = Math.pow(b,2)-4*a*c; if (d>0){ return [(-b+Math.sqrt(d))/(2*a),(-b-Math.sqrt(d))/(2*a)]; } else if(d==0){ return [-b/(2*a)]; } else{ return null; } } var result = decideEquation(2,10,5); if (result){ trace ('Equation have some roots'); for each(var item in result) trace (item); } else{ trace("Equation haven't roots"); }
Вот и все. В следующем уроке подробней остановимся на циклах, а также рассмотрим подробнее массивы. До скорых встреч!