Улучшаем код («Программируем на 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");
}

Вот и все. В следующем уроке подробней остановимся на циклах, а также рассмотрим подробнее массивы. До скорых встреч!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *