Верхний пост

Featured

Здравствуйте! Пожалуйста, сообщайте об ошибках, недочетах, непониманиях и прочих нерадостях, если они у вас будут, в той статье, которая нерадость вызвала. Это необходимо! Очень необходимо. Спасибо

Вся правда о циклах

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

Что же такое цикл? Для начала неплохо было бы вспомнить существование циклов в реальной жизни: смена времен года (ведь каждый год одно и то же: весна и лето, осень, зима холодом мне бьет по роже), обучение в институтах или в школе (1–11 классы, 1–5 курс, каждые полгода контрольные, сессии, экзамены), ежедневные походы на работу или просыпания по утрам (или как у меня — посреди бела дня). Во всем этом есть одинаковые две вещи: во-первых, это цикличность (она же одинаковость) действий, а во-вторых это то, что хоть действия и одинаковы, но какой-то таинственный счет ведется. Ведется номер года, класса, курса, день работы, или день встречания влюбленных. В этом и есть суть цикла: выполнять одинаковые действия, при этом считая их. Надеюсь, это поможет отложить в мозгу уяснение. Рассмотрим же, как выглядит цикл while

var i: int = 0;
while(i < 3)
{
	i = i +1;
	trace(i);
}

В первой строке мы завели переменную “i”. Кстати, как по мне, “i” повсюду пишется не зря. Я не особо вдавался в подробности, но это сокращение имеет смысл. Это не столько “int”, сколько, например, “incre­ment”, то есть “приращение, увеличение”. А так же слово “итерация” (что с латыни, как я узнал, означает слово “повтораяю”). Очень часто в циклах переменная должна увеличиватсья (гораздо реже — уменьшаться). Этим отклонением от темы я просто прорезюмирую, что в первой строке мы завели переменную i и приравняли ее нулю.

Во второй строке же начинается условие (о нем говорилось в предыдущей статье), которое собственно, покуда выдает true (а так будет еще целых два раза, когда i будет равно единице, а потом двойке), будет выполнять функцию (о ней тоже говорилось в предыдущей статье). В функции происходит следующее: увеличивается i на единицу, и, собственно, трейсится значение переменной i. Все просто до безумия, вот почему я такой безумный!

В старых добрых традициях, перевожу на русский язык программирования:

создать переменную i, приравнять ее нулю;
(до тех пор, пока i меньше, чем три, выполнять следующее)
{
	увеличить i на единицу;
	показать волшебную строку со значениям переменной (i);
}

Как я и говорил, все просто. Теперь, когда вы знаете о существовании одного вида циклов, я расскажу еще об одном. Он именуется как for i. То есть:

for(var i: int = 0; i < 3; i++)
{
	trace(i);
}
допустим(что появилась переменная i и она равна нулю;
так же она меньше трех; и каждая итерация увеличит i на 1)
{
	показать волшебную строку со значениям переменной (i);
}

Я очень часто пользуюсь именно оператором for, while же в особых случаях, но о них позже. Существуют еще некоторые циклы по типу for each и прочие циклы с поиском по ключам в объекте, но о них речи пока идти не будет, так как это пока не надобно и напряжно для понимания. А о do..while я говорить не буду, так как считаю этот цикл бесполезным просто потому, что ни разу в своей жизни не использовал его и не видел в чужом коде. Это не значит, что это стоит исключить из жизни, это просто значит, что я недалек, и вам придется по поводу do..while искать объяснение в других местах (например, вот)

У вас может возникнуть резонный вопрос — а для чего нужны эти циклы? Как для человека, который только вникает в это дело, действительно, понять их смысл не так уж и просто. Например, если поставить задачу “выводить 10 раз подряд число, которое будет увеличено на 1.25 при каждом выводе его в трейс”, то можно просто написать 20 строчек, одна строчка — приращение, вторая — вывод на экран, и так 10 раз. Но что, если 196 раз надо? 400 строк кода ради этого марать не ок, не так ли? А если потом окажется ошибка, и надо не 196, а 19? А что, если 2014 раз так надо сделать? Наверное, вы уже поняли смысл — сэкономить время, да и вообще, это просто и лаконично. Давайте посмотрим парочку примеров и попрактикуемся(самое время расчехлить флешдевелоп и очистить часть кода, что была понаписана ранее, как и раньше):

var i: int = 4;
while(i > 0)
{
	i--;
	trace(i + "...");
}
trace('BOOM!');

Повторим это же с помощью for

for(var i: int = 3; i >= 0; i--)
{
	trace(i + "...");
}
trace('BOOM!');

как видите, тут i больше либо равен 0, иначе бы было 3…2…1…, без нуля

Так как вся польза циклов будет просыпаться с каждой статьей все больше и больше, то в данный момент приводить бесполезные примеры дальше мне лениво. Просто попрактикуйтесь, заодно испытайте всю соль ошибок, например сделав в while (i > 0) обрабатывание не “i–” а “i++”, тем самым войдя в бесконечный цикл (так как i всегда будет больше нуля и всегда будет обрабатываться. Ну зависните пару раз, но ведь запомните же, проникнитесь, так сказать, всей душой в суть), или написав аналогично for(var i: int = 3; i >= 0; i++) и испытав тот же бесконечный цикл

Домашнее задание!
На этот раз оно будет много сложнее, чем ранее, потому как тут придется подумать над одной интересной функцией. Причем очень много подумать, если вы встречаетесь с этим впервые. Традиционно, я сделаю то, что хочу увидеть в трейсе, а вы — сам код, который произведет такой же трейс:

разверни меня, пожалуйста
100 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 99
99 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 98
98 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 97
97 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 96
96 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 95
95 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 94
94 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 93
93 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 92
92 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 91
91 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 90
90 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 89
89 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 88
88 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 87
87 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 86
86 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 85
85 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 84
84 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 83
83 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 82
82 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 81
81 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 80
80 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 79
79 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 78
78 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 77
77 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 76
76 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 75
75 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 74
74 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 73
73 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 72
72 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 71
71 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 70
70 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 69
69 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 68
68 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 67
67 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 66
66 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 65
65 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 64
64 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 63
63 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 62
62 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 61
61 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 60
60 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 59
59 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 58
58 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 57
57 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 56
56 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 55
55 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 54
54 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 53
53 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 52
52 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 51
51 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 50
50 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 49
49 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 48
48 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 47
47 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 46
46 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 45
45 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 44
44 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 43
43 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 42
42 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 41
41 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 40
40 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 39
39 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 38
38 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 37
37 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 36
36 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 35
35 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 34
34 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 33
33 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 32
32 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 31
31 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 30
30 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 29
29 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 28
28 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 27
27 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 26
26 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 25
25 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 24
24 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 23
23 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 22
22 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 21
21 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 20
20 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 19
19 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 18
18 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 17
17 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 16
16 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 15
15 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 14
14 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 13
13 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 12
12 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 11
11 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 10
10 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 9
9 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 8
8 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 7
7 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 6
6 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 5
5 бутылок с молоком лежит на столе… Одну внезапно выпили, осталось 4
4 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 3
3 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 2
2 бутылки с молоком лежит на столе… Одну внезапно выпили, осталось 1
1 бутылка с молоком лежит на столе… Одну внезапно выпили, осталось 0
0 бутылок осталось на столе. Знатно потусили

Казалось бы, ничего сложного, но вся суть в том, что тут слово “бутылка” склоняется в зависимости от числа. Казалось бы, что сложного, проверять: если число “1” то писать “бутылка”, а в ином случае — “бутылок”, но вся суть в том, что это русский язык, а не английский, тут существует еще “бутылки” (то есть, несколько (слаб в русском языке, не знаю, как именуется. Но есть 3 вида склонения: единственное число, множественное и “несколько” (оно же склонения слова в родительном падеже, то есть, кого? чего?), хе-хе)). Казалось бы, эта деталь не так уж и сложна: если 1, то выдавать “бутылка”, если 2,3,4 — “бутылки”, а если 5,6,7,8,9,0 — “бутылок”, но вся суть в том, что в русском языке есть такие заподлянские числа, как 11, 12, 13, 14, в которых склоняется все в множественном числе. Итого имеем геморрой. Нужно сравнивать уже по второму числу справа, а значит — разделять уже цифры на 2 группы — самое правое число и второе справа, чтоб узнавать, попали ли мы на “11–15″ или нет. Хвала богам, в русском языке додумались только первые 14 чисел так намудрить, а потом все поддается логике: после сотни начинается все сначала, главное — отсечь все числа слева, и иметь только два правых. Но как? В этом вам поможет оператор остатка от деления. То есть, в нем можно сделать %100 и получить уже всегда только 2 числа. Например 214 % 100 = 14, 601 % 100 = 1, и так далее. Получить только одно правое число можно с помощью, как вы уже все, разумеется, догадались — с помощью “%10″. В общем, советую обзавестить функцией getBottleFromNum, которая будет принимать в себя число, а выдавать строку со склоненным словом. Дальше думайте, как все проделать и не читайте ниже — там подсказка. А те, кто решил сдаться, читайте ниже.


Итого имеем два числа: правое и второе справа. Тут уже становится проще: если правое число равно 1, а два числа, при этом, больше 20 (21, 31, 41 и т.д., так как 11 у нас это множественное), либо же входящее число должно быть равно единице, то выдаем “бутылка“
Если же число справа равно 2–4, то смотрим на то, чему равны два числа, опять же: если 12–14, то не работает наше условие так как 12–14 это множественное, значит, опять же, должно быть больше 20, либо же входящее число должно быть больше двух или меньше четырех. В этом случае выдадим “бутылки“
Если же входящее число больше четырех, (дальше додумывайте сами), то выдадим “бутылок”

Для тех, кто не смог осилить, есть код:

// функция, которая выдает слово, склоняемое в зависимости от числа
function getBottleFromNum(num: int) : String
{
	// если входящее число отрицательное, то делаем его положительным
	if (num < 0) num = num * -1;

	// крайняя правая цифра
	var num2: Number = num % 10;
	// вторая цифра справа
	var num3: Number = num % 100;
	// [входящее число равно единице] или же [входящее число больше 19
	// и при этом крайняя правая цифра равна единице (21, 31, 41, 51 и т.д)]
	var isOne: Boolean = (num == 1) || (num > 19 && num2 == 1);
	// [входящее число больше единицы и меньше пяти] либо [входящее больше
	// 19 и правая цифра меньше пяти и [вторая справа меньще 12 или больше 14]]
	var isSome: Boolean = (num > 1 && num < 5) || (num > 19 && num2 > 1 && num2 < 5 && (num3 < 12 || num3 > 14));
	// [входящее число больше четырех]
	var isMany: Boolean = (num > 4);

	// если isOne == true, то выдадим "бутылка" и выйдем из функции (даже если isMany тоже true)
	if (isOne) return 'бутылка';
	// если isSome == true, то выдадим "бутылок" и выйдем из функции (даже если isMany тоже true)
	if (isSome) return 'бутылки';
	// выдадим "бутылок", так как больше вариантов не осталось
	return 'бутылок';
}

trace(getBottleFromNum(1));
trace(getBottleFromNum(2));
trace(getBottleFromNum(5));
trace(getBottleFromNum(11));
trace(getBottleFromNum(21));

Дерзайте, всего доброго!

О функциях и условиях (и Булево число!)

Добрый день, сегодня без вступления. Почти

Функции
Если задуматься, что же такое функция, то можно понять, что это набор каких-то команд, который помещен в какую-то оболочку с названием. Что-то типа ребенка, которого вы научили выносить мусор. Вы вызываете у него функцию и он начинает выносить мусор. Если бы он не был научен и не знал набор инструкций, то вам бы пришлось каждый раз проводить его до мусорного бака, показывать куда выкидывать пакет, и как скрываться с места происшествия. То есть, как можно заметить, функция сокращает время и помогает мыслить более масштабно, используя (детишек!) уже более хитрые шаблоны достижения вашей цели. Давайте посмотрим, о чем я говорю. Представим, что вы внезапно захотели украсить свои математические и строковые тренировки разделителями с завитушками, ну примерно так (это означает, что вам сейчас опять придется открыть Main.as, удалить ваши предыдущие старания и написать вместо них следующие строки):

var x: Number = 20;
var y: Number = 10;
var z: Number = 30;
var text: String;

text = 'x=' + x + ', y=' + y + ', z=' + z;

trace(' ____________________________');
trace('/                            \\');
trace('------------------------------');
trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
trace(text);
trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
trace('------------------------------');
trace('\\____________________________/');

Как видите, такой чизбургер занимает 8 строк кода, но на что не пойдешь ради завитушек! Итак, вы подумали, что можно проделать с вашими числами еще что-то. Например, вывести, сколько будет z * x, или x — y. И все в своем чизбургере, разумеется:

var x: Number = 20;
var y: Number = 10;
var z: Number = 30;
var text: String;
text = 'x=' + x + ', y=' + y + ', z=' + z;

trace(' ____________________________');
trace('/                            \\');
trace('------------------------------');
trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
trace(text);
trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
trace('------------------------------');
trace('\\____________________________/');

text = 'z * x = ' + (z * x);

trace(' ____________________________');
trace('/                            \\');
trace('------------------------------');
trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
trace(text);
trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
trace('------------------------------');
trace('\\____________________________/');

text = 'x - y = ' + (x - y);

trace(' ____________________________');
trace('/                            \\');
trace('------------------------------');
trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
trace(text);
trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
trace('------------------------------');
trace('\\____________________________/');

Как видите, эта игра с чизбургерами начинает приобретать масштабы в коде. А все из-за того, что мы не знаем, что делать с одинаковыми повторяющимися вещами, которые занимают много строк. Для этого (для одинаковых повторяющихся вещей, что занимают много строк) и предназначены, как вы уже догадываетесь, функции. Давайте же посмотрим, что такое функция:

function cheeseburger() : void
{

}

Перед вами пустая функция с именем cheese­burger. Она полна таинства и увлекательности. Попробуем рассмотреть каждое слово и заодно символ. Первым в этой вещи идет слово func­tion, оно почти как “var”, но только тут объявляется не переменная, а функция, которая сразу же несет в себе какое-то действие, в отличие от var, где можно объявить переменную, но ничего с ней не делать, а потом изменить. С функцией такого не прокатит. Следующим после слова func­tion идет название самой функции, в нашем случае это cheese­burger. Затем идут открывающие и закрывающие скобки. Там идут входящие параметры, которые могут использоваться внутри функции, но если их нет, то можно и не писать. О них будет чуть позже, чтоб не нагружать вас сразу же. Далее идет двоеточие (прямо как в объявлении переменной), а после него идет тип функции. Как бы это не было странно, но у функции есть тоже тип. Только у функции это тип значения, которое вернет эта функция. Об этом будет тоже позже, чтоб вас не травмировать. Void обозначает, что функция ничего не возвращает, если что. Затем мы видим открывающую фигурную скобку, это обозначает, что после этой скобки вы можете писать всяческий код, который будет храниться в этой функции. Закрывающая скобка обозначает, как вы понимаете, окончание функции. Но спешу заметить, что тут существует иерархия фигурных скобок. То есть вы можете вложить в функцию еще одну функцию, но в таком случае, у нашей функции cheeseburger, окончанием будет уже вторая закрывающая фигурная скобка (потому что первая закрывающая скобка будет служить окончанием вложенной функции. Трудно понять, наверное, но на деле, если привыкнуть, все будет гораздо проще). Итак, мы разобрали нашу функцию по кусочкам и стоит закрепить витающие знания делом. Напишем в нашу функцию весь тот завитушечный сброд:

function cheeseburger() : void
{
trace(' ____________________________');
trace('/                            \\');
trace('------------------------------');
trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
trace(text);
trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
trace('------------------------------');
trace('\\____________________________/');
}

Когда вы пишете что-то в функции, то обычно код в ней автоматически табулируется на одну табуляцию вправо. Такой подход помогает понять, что вы находитесь на каком-то уровне вложенности во что-то. Выглядит приятно, молодежно и стильно. Давайте теперь перепишем наш код по новой:

var x: Number = 20;
var y: Number = 10;
var z: Number = 30;
var text: String;

function cheeseburger() : void
{
trace(' ____________________________');
trace('/                            \\');
trace('------------------------------');
trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
trace(text);
trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
trace('------------------------------');
trace('\\____________________________/');
}

text = 'x=' + x + ', y=' + y + ', z=' + z;
cheeseburger(); // мы вызвали функцию "чизбургер!".
// Очень схоже на trace(), не так ли? Так что же такое trace, в таком случае, ммм?

text = 'z * x = ' + (z * x);
cheeseburger();

text = 'x - y = ' + (x - y);
cheeseburger();

Как видите, теперь это коротко и ясно все, и занимает в 8 раз меньше места. Но внезапно нам захотелось выводить не только переменную text (она ведь у нас в функции cheese­burger трейсится) в завитушках, но и другие какие-нибудь вещи, например просто себе привет передать. Что для этого вы предпримете? Вполне может быть, разбили бы функцию на “верхняячасть чизбургера” и на “нижняя часть чизбургера”, и затем вызывали бы сначала верхнюю часть чизбургера, затем выводили бы ваше послание, а затем вызывали бы нижнюю часть чизбургера. Но это не торт, согласитесь. Давайте еще раз прочитаем строки, где говорилось о каких-то входящих параметрах. Так вот, у функции есть входящие параметры. Ей их можно создавать, если они необходимы, а можно и не создавать, если функция самодостаточна и ей никто не нужен. У нас функция была самодостаточной, пока нам внезапно не взбрело в голову что-то выводить еще там другое. Давайте же разбираться с входящими параметрами

Параметры у функции
Стоит вам рассказать об этом. У функции существуют входящие параметры. Они бываю двух типов: обязательные и необязательные. Что это такое? Сейчас объясню. Возьмем в пример функцию say­Hello, и функцию sayHelloTo. Они будут выглядеть так:

function sayHello(name: String = '') : void
{
	trace('Привет ' + name);
}

function sayHelloTo(name: String) : void
{
	trace('Привет, ' + name);
}

Для начала стоит глянуть на то, что в скобках появились переменные какие-то. Это и есть входящие параметры. То есть, вызывая функцию, мы теперь можем указать ей какой-то параметр (в нашем случае, это строка), ну, типа sayHello(“Петька”);. Как можно заметить, эта переменная используется внутри функции, но хочу так же заявить, что дальше этой функции переменную использовать будет нельзя. В смысле, внутри этой функции переменная существует, но как функция выполнится, переменная исчезнет. Навсегда. Это еще называется локальной переменной, вот такие дела (по секрету, мы сейчас все в наших трудах пишем с помощью локальных переменных, и вы не поверите, но даже функции в данный момент локальные пишем (пока что), но это так, отступление). А теперь вам мимолетное задание: определить, в какой из этих двух функций используется обязательный параметр. Ответ строкой ниже

Правильный ответ: во второй. Во второй функции используется обязательный параметр. Объясняется это тем, что у нее параметр просто типа String, а в первом варианте он еще и автоматом заполняется (пустой строкой (две одинарные кавычки), но все же определен параметр). Итак, определительная черта обязательного параметра от необязательного в том, что обязательный параметр просто объявляется, а необязательный параметр объявляется, но еще и к нему вдобавок сразу же идет присвоение какого-то значения. Теперь стоит объяснить, в чем соль необязательных и обязательных параметров. Вы, скорее всего, и так уже догадываетесь, ведь вы и сами в жизни говорили не раз слово “не обязательно”. То есть, можно вписать, если хочется, а можно и оставить как есть. В этом-то и все отличие. Необязательный параметр обозначает, что обычно он используется почти всегда вот в таком варианте, но если надо, то все можно поменять. Так же хочу заметить, что если создать несколько параметров в одной функции, обязательных и не очень, то обязательные параметры должны идти в первую очередь, а после них, вконце, уже необязательные, иначе вас ждет ошибка. Вот, проверьте:

function getBall(type: String = 'футбольный', size: Number) : void
{

}

Вы получите такую ошибку: Error: Required para­me­ters are not per­mit­ted after optional para­me­ters.. Если же не вписать в функцию параметр, хотя он обязательный, вы получите такую ошибку: Error #1063: Несоответствие количества аргументов в Function/Main/private:init/getBall(). Ожидалось 1, получено 0.. То есть, оно ожидало параметр, а я обломал его, но за это и поплатился. Запомните эти ошибки, быстрее сможете понять, в чем проблема.

Наверное, вы уже и забыли, к чему я это все клоню, а клоню я к нашим старым добрым завитушкам. Давайте добавим в наш чизбургер обязательный параметр “stuffing” (вроде как начинкой переводится :), которую и будем высвечивать:

var x: Number = 20;
var y: Number = 10;
var z: Number = 30;
var text: String;

function cheeseburger(stuffing: String) : void
{
	trace(' ____________________________');
	trace('/                            \\');
	trace('------------------------------');
	trace('/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\');
	trace(stuffing);
	trace('\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/');
	trace('------------------------------');
	trace('\\____________________________/');
}

text = 'x=' + x + ', y=' + y + ', z=' + z;
cheeseburger(text);

text = 'z * x = ' + (z * x);
cheeseburger('Невероятно, но факт: ' + text);

Как видите, это более приятно. Давайте попробуем теперь еще возвращать значение. Забудем о чизбургере, он умер. Теперь мы математики. И нам внезапно стало интересно, а что будет, если взять число (какое на ум пришло), прибавить к нему двойку, а затем умножить результат на 2, а затем прибавить тройку, а затем отнять задуманное число, а затем прибавить пятерку, а затем отнять тройку. Что же получится из этого? Поэтому вооружившись мелом и клавиатурой, мы решаем узнать наш мучающий нас вопрос (а заодно удалите все ваши предыдущие старания):

// мы будем работать только с целыми числами, поэтому
// и входящие и выходящие параметры будут целыми числами
// заметьте, что уже не void, а int на выходе

function solveProblem(num: int) : int
{
	var result: int;
	result = num + 2;
	result = result * 2;
	result += 3; // чтоб не писать result = result + 3
	result -= num; // аналогично
	result += 5;
	result -= num;

	return result; // внезапно какой-то return. Если перевести
	// это слово на русский, то снанет понятно, что функция вернет
	// куда-то наш результат. return используется для выхода из функции
	// попутно возвращая какое-то значение. Для функций, что возвращают
	// void, не нужно указывать, что возвращать, произойдет просто выход из функции
}

var num1: int = solveProblem(240);
var num2: int = solveProblem(1);
var num3: int = solveProblem(4);

trace(num1, num2, num3);

Мы получили ответы на интересующие нас вопросы: всегда выходит 12. Это все потому, что это математический фокус-покус *хохочет до слез*

Также, для пытливых умов, коорые “а как это так в трейс вмещаеся миллион переменных, хотя в подсказке видно только одну входящую переменную?”. Я вам скажу, это все из-за секретной комбинации “…rest”. Вернее, вообще троеточие перед названием переменной (в данном случае это rest). Но так как это массив, о котором в данной статье речи не пойдет, разбирайтесь сами, вот

Условия
Если можно подумать, что краткий экскурс в функции введен, то в условия не введен, что сейчас и будет исправляться. У меня есть подозрение, что вы уже подозреваете, что такое условие. “Не идешь со мной? Тогда я сам пошел”. Вот тут ставится условие, и еще и выполняется оно. Рассмотрим же, как это выглядит во флеше:

if(24 > 3)
{
	trace('24 > 3');
}

Итак, что мы видим? На первой строчке пишется условие “if” и в скобках само условие (24 > 3). Затем выполняется (да-да, не зря я первым делом начал рассказывать про функции) что-то типа функции. Все ровно так же: открывающая скобка, закрывающая скобка. Как же это будет выглядеть “по-нашему”? Как-то типа этого:

если(24 > 3)
выполнить следующее
	trace('24 > 3');
закончить выполнять

Также в условиях есть еще некое “а если нет, то тогда выполнить следующее”. Называется оно else

if(2 > 4)
{
	trace('два больше четырех');
}
else
{
	trace('два меньше четырех!');
}

При написании такой конструкции, мы увидим сообщение, что два меньше четырех, и это удивительно! Также существует еще else if. Это когда “если в магазине не будет белого хлеба, купи черный, если не будет и черного хлеба, тогда купи булочку, если даже булочки не будет, купи бублик, ну если даже бублика не будет, то выйди с казино/стрипклуба/кинотеатра и зайди в магазин”. Выглядит это так:

if(1 > 3)
{
	trace('1 > 3');
}
else if (2 > 3)
{
	trace('2 > 3');
}
else if (3 > 3)
{
	trace('3 > 3');
}
else if (4 > 3)
{
	trace('4 > 3');
}

Если порассуждать, то выполнится только последнее условие (и так и есть!). Если же вы, например, во втором условии “2 > 3″ двойку поменяете, например, на пятерку, то после того, как выполнится второе условие, проверяться третье и четвертое не будут. Какие же основные операторы сравнения? Сейчас расскажу самые основные:

>    - больше (4 > 1)
<    - меньше (1 < 4)
==  - приравнивается (4 == 4)
>=  - больше или равно (4 >= 4)
<=  - меньше или равно (4 <= 4)

Запомните, что в условиях вы сравниваете числа только с помощью двух знаков равенства, если поставите один, вы произведете присваивание, чему мы учились в предыдущих статьях. Нельзя сравнивать, в общем, таким образом: “if(a=b)…”, нужно “if(a==b)…”

И да ИЛИ
Так как оператором “>=” было затронуто слово “ИЛИ”, то стоит вам рассказать о таких понятиях, как И и ИЛИ. И и ИЛИ это еще одни дополнительные возможности при выполнении условий. В фразе “больше ИЛИ равно” видно, что посиживает некая ИЛИ. Пишется она так: “||”. И же пишется так: “&&”. Что нам это дает? Дает нам это новый уровень “гибкости” при выполнении условий. Например если четыре больше двух и одновременно с этим меньше шести, то выполнить условие. Или же если два меньше четырех или два больше одного, то выполнить условие

var a: Number = 2;
var b: Number = 4;
var c: Number = 1;
if(a > b || a > c)
{
	trace('"a" победила!');
}

if(a > b && a > c)
{
	trace('"a" тотально победила!');
}

Если вы проверите, то выполнится только первое условие, потому что “2” больше только единицы, а во втором условии, требуется чтоб “a” была больше и “b” и “c”, но так как “b” равно четырем, то второе условие обломалось. Запомните или просто усвойте, а потом сами вспомните, когда пригодится это дело

Булево число

Что касается работы условий, то есть еще один секрет: они работают не за счет этих значков (утрировано), а за счет того, что выдают они — true или false. Условие выполняется, если выражение с этими операторами выдаст true, либо не выполняется, если выдаст false. Попробуйте, напишите в трейсе что-то типа

trace((1 > 4), (2 < 6), (6 >= 6));

Вы увидите false true true. А все потому, что единица меньше четырех, двойка меньше шести, а шесть равно или меньше шести. Как говорится, добро пожаловать в число Буля. Число буля крайне многогранно: либо 0, либо 1. В нашем случае, 0 это false, а true это 1. Во флеше это Boolean тип:

var bool1: Boolean = true;
var bool2: Boolean = (2 > 4);
trace(bool1, bool2);
if(bool1)
{
	trace('true!');
}

Как вы понимаете, теперь набор операторов типа сравнения или неравенства стал еще шире, потому что вы можете, грубо говоря, выдумывать свои правила сравнения, написав функцию, которая будет возвращать булево число, сравнивая внутри себя ваши вещи по своим правилам, что избавит вас от гигантской строки сравнений внутри условия

На сим считаю статью закрытой. Краткий экскурс введен и туда и сюда. Теперь домашка:

Дано: детишки. Вам надо выяснить, кто умнее кого. Для этого я вам предлагаю создать функцию “com­pare”, у которой будут четыре входящих параметра: name1, iq1, name2, iq2. Это имена и айкью детишечек. В этой функции вы должны сравнить айкью, и вывести имя победителя или проигравшего. Внизу я приведу, как я буду вызывать функции и какие ответы ожидать:

compare("Петька", 90, "Максимка", 100); // Петька дурак
compare("Коля", 84, "Юрий", 82); // Юрий дурак
compare("Аполлоний", 100, "Афанасий", 100); // Победила дружба

Дерзайте. Спасибо за прочтение!

Работа с переменными | Шокирующая правда о строках

Вы когда-нибудь задумывались, что вы знаете о строках? Нет? Может вы и вовсе о них ничего не знаете? Давайте я вам расскажу. Присаживайтесь к костру, накалывайте на палку зефир и слушайте историю

Строки это набор символов. Длина строки где-то там ограничена, но зачастую лимит этой длины никому не нужен, потому как даже мегабайт информации копить в одной строке, это слишком жирно. Строки сложнее чисел, потому, что у строк есть много больше параметров, но об этом позже, мы пока сделаем вид, что абсолютно ничего не слышали о слове “параметры” и вспомним о нем через несколько статей с фразой “где-то это уже пролетало у меня на слуху… хмм”. Краткий ликбез по тому, что такое строки, считаю законченным: набор символов и все тут, даже если нет символов, то все равно набор из нуля символов. Давайте лучше что-нибудь напишем каверзное. Открывайте Main.as, стирайте ваши предыдущие старания с цифрами (ну или оставьте, если очень нравится вам результат), творите:

var hello: String = "Привет";
var world: String = 'мирочек';
var helloWorld: String = hello + world;
trace(helloWorld);

Смотрим, что тут произошло: во-первых, вы помните, что тип строки это String, во-вторых, тут видно, что первая строчка в двойных кавычках записана, а вторая строчка в одинарных. В-третьих, мы видим, что строки можно складывать. Но что мы видим? Я уверен, вы ожидали увидеть “Привет мирочек”, но увидели “Приветмирочек”. А все потому, что пробел это тоже символ. Давайте его добавим прямо в переменной helloWorld:

var hello: String = "Привет";
var world: String = 'мирочек';
var helloWorld: String = hello + " " + world;
trace(helloWorld);

Теперь все ок. Давайте теперь поучимся писать текст с кавычками:

var once: String = "'одинарные'";
var double: String = '"двойные"';
var multi: String = "'" + '"' + 'всякие' + '"' + "'";
trace(once, double, multi);

В первой строке мы в двойные кавычки взяли одинарные. Во второй строке мы одинарные взяли в двойные. В третьей строке мы попеременно брали в одинарные кавычки двойные, в двойных кавычках одинарные и вот так вот выкрутились из ситуации. Но я вам расскажу еще об одном чудном символе, его имя — обратный слеш. Он пишется так: “\”. Всякий раз, как в строке вы ставите обратный слеш перед каким-то символом, его (слеша, а еще и иногда символа) не будет видно. Если же это кавычка, то она не будет учитываться как закрывающая. Вот, глядите:

var slash: String = "обратный \"слэш\"";
trace(slash);

Так же есть несколько комбинаций с этим обратным слешом: \n делает перевод на новую строку (\r иногда тоже), \t делает табуляцию, а спомощью двойного обратного слеша можно написать сам слеш, вот такие дела:

trace('\\Привет\n,\tмирочек\\');

Как вы понимаете, можно складывать числа и строки:

var num1: Number = 204;
var num2: Number = 48294;
var sum: Number = num1 + num2;
var result: String = num1 + ' + ' + num2 + ' = ' + sum;
trace(result);

Мы увидим внизу “204 + 48294 = 48498″. Это ведь так мило

Также я рекомендую вам обратить внимание на код ошибки, который появляется, если вы забыли закрыть скобку или что-то в этом роде со строкой:

Error: Syntax error: A string literal must be terminated before the line break.

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

У лукоморья дуб зелёный;
Златая цепь на дубе том:
И днём и ночью кот учёный
Всё ходит по цепи кругом;

Как для домашнего задания, я вам предлагаю написать данный стишок двумя способами. Кто не догадался, как сделать двумя способами, читайте ниже

(первый способ, это написать в одну строку, и каждый столбик разделять с помощью \n, а второй способ это 4 раза протрейсить 4 разных строчки)

Работа с переменными | Числа, сложение, вычитание и все такое

Пришло время рассказать вам о работе с числами. Это будет очень сложно, но вы должны будете вникнуть, потому, что впереди будут строки. Откинув бессмысленное вступление, я предпочту напомнить о существовании переменных, их типах и о том, что их можно объявлять.

Как вы помните, у переменных есть тип. И есть несколько типов чисел: целые числа, дробные числа (школьную математику наверное вспомнили сразу) и еще даже числа, которые могут быть не больше, чем 4294967295. Но давайте лучше более упорядочено:

  1. Num­ber — это любое число, будь оно дробное или очень большое или даже минус десять. Оно останется таким. Иногда, из-за погрешностей в флеше будут изменения на одну миллионную, но на то он и флеш, чтоб не быть серьезной системой исчислений. Понимает как отрицательные, так и положительные числа
  2. int — этот тип чисел предназначен только для целых чисел. Даже если вы напишете 2.5, то оно запомнит это как 2. Оно отсекает все дробное и имеет при себе только вот это. Тоже понимает отрицательные и положительные
  3. uint — этот тип чисел хранит числа от нуля до 4294967295. Если задать ему 4294967296, то вы получите 0, а если задать 4294967297, то получите 1. То есть, как вы можете догадаться, идет по кругу. Также uint не может быть отрицательным, то есть число –1 будет равно 4294967295. Так же число 4294967295 можно запомнить как 0xFFFFFFFF (4 пары F. Это шестнадцатибитное исчисление, и в uint первые две F обозначают прозрачность, а остальные 6 F обозначают кодировку цвета, но об этом опять же позже. Просто знайте об этом)

Мы в основном будем почти всегда использовать один лишь Num­ber, но временами будут случаи, когда лучше воспользоваться int или uint в целях более быстрой работы или более упорядоченной мысли. Давайте вспомним, как объявляется переменная и как она меняется:

var myNumber: Number = 24;
myNumber = 16;

Итак: слово “var” это начало объявление переменной, “myNum­ber” — это то, как мы назвали переменную. Воля фантазии должна помочь вам выдумать название для переменной, только с одним условием: в них не должно быть ничего, кроме букв и цифр, причем не должно начинаться с цифр, иначе рискуете получить ошибку с названием “Error: Syn­tax error: expect­ing iden­ti­fier before #.”, где вместо “#” будет цифра, которую вы надумали поставить первой. Двоеточие после вашего названия означает, что сейчас вы укажете тип переменной, и это, как вы поняли, Num­ber. Знак равенства обозначает, что вы приравняли переменной что-то, и это в нашем случае 24. Точка с запятой обозначает, что вы закончили свою мысль. Во второй строке все и так понятно. Давайте испытаем это на деле. Откройте ваш флешдевелоп, в нем по идее открыт Main.as с вашей строчкой “trace(“Привет, безумный мир!”);”, которую я предлагаю вам удалить, и написать вместо нее вот что:

var num1: Number = 10;
var num2: Number = 5;
var sum: Number = num1 + num2;

Что же тут произошло? В первой строчке произошло создание переменной с именем num1 и равным десяти, во второй аналогично, но num2 и равное пяти, а в третей строчке переменная sum равна сумме num1 и num2. Но как узнать, чему равно sum? Сейчас вы узнаете о магическом трейсе

trace | debug
Итак, trace(он же трэйс, но из-за лени писать букву “э” это трейс) — одна из веточек, которая вытягивает вас, когда вам важно узнать что-то, или проверить ошибку, или найти ошибку. Эта команда (она же функция) выводит в окошко исходящих сообщений все, что вы ей прикажете. Абсолютно все, если это не ломает логику и не создает ошибок в коде. Может вывести вам сумму двух чисел, а может вывести вам строку, а может вывести тип переменной, а может! А может! В общем, запомните на всю свою жизнь о трейсе, это очень полезно: trace(%вашежелание%);, где вместо %вашежелание% вы пишете то, что захотели увидеть. Давайте же теперь попробуем проверить, чему равна переменная sum:

var num1: Number = 10;
var num2: Number = 5;
var sum: Number = num1 + num2;
trace(sum);


Как видите, 10 + 5 = 15, и компьютер не соврал. Кажется, вы начинаете обрастать небольшим доверием к нему. А давайте отнимем от 10 пятерку!

var num1: Number = 10;
var num2: Number = 5;
var sum: Number = num1 + num2;
trace(sum);
var sub: Number = num1 - num2;
trace(sub);

Итого мы видим: 15, 5. 10 + 5 = 15, а 10 — 5 = 5. Все сходится. Что ж, попробуем умножать и делить?

минутка сообразительности! Попробуйте проделать умножение и деление самостоятельно, а затем сверьтесь с тем, как это написано внизу (хехехе)

var num1: Number = 10;
var num2: Number = 5;
var sum: Number = num1 + num2;
trace(sum);
var sub: Number = num1 - num2;
trace(sub);
var mult: Number = num1 * num2;
var div: Number = num1 / num2;
trace(mult, div);

С этих строк, вы наверное заметили подозрительной последнюю. Но я вам скажу: через запятую можно выводить несколько переменных или прочих вещей, запомните это. 10 + 5 = 15, 10 — 5 = 5, 10 * 5 = 50, 10 / 5 = 2. Все верно

Кажется, вы поняли всю соль, как работать с числами. Давайте теперь немного попрактикуемся с int и uint. Сотрите ваши предыдущие экзекуции и пишите следующее:

var i: int = 24.18;
var u: uint = 0.5;
trace(i, u);

И мы имеем i=24 и u=0. Это лишь подтверждает, что тут работают только целые числа, давайте дальше:

var i: int = 24.18;
var u: uint = 0.5;
trace(i, u);

u = u - 2;
i = i - 25;
trace(u, i);

Тут вы можете заметить, что переменную можно прибавлять саму к себе или самой с собой работать. Так же “u = u –2″ можно записать как “u -= 2″, это аналогично. А для “-1″ или “+1″ есть такие операторы, как “–” и “++”. Ну, типа, если i = 0, то i++ = 1, а если еще раз потом написать i++, то i будет равно двум. Надеюсь, поняли. Так же, при условии что u типа uint, и, как вы помните (а вы ведь помните?), uint не может быть отрицательным и идет по кругу. То есть 0 минус 2 будет, разумеется, 4294967294. Зато int может быть отрицательным, поэтому 24 — 25 = –1, что мы и увидели в логах

По идее, с числами вы разобрались. Домашнее задание будет таково: почитать о HEX, а так же узнать, чему будет равно 0xff; 0xabcdef; 0x123456;

Подготовка к практике | Устанавливаем FlashDevelop

Всем привет, вы читаете новую статью, в которой узнаете, что мы будет практиковаться во flashdevelop’e, а так же узнаете, что и как понадобится вам для этого. Итак, приступим

1. Почему FD?
Отвечаю: FlashDe­velop это простая и бесплатная программа, которая, хоть и работает только под Win­dows, но зато очень простая, очень удобная и далеко не такая ресурсоемкая, как Flash Pro­fes­sional. Более того, она сохраняет исходный код даже когда крэшится(ломается), а если и крэшится, то зачастую еще и очень быстро самовосстанавливается. Это явное преимущество перед тормозным, дорогим, убогим Flash Pro­fes­sional. Стоит заметить, что такие удобства, как автокомплит(подсказка автозаполнения определенных слов) или генерация простых каких-нибудь блоков текста отсутствуют вовсе или же появились только к 11-й версии (автокомплит появился только в 11-й версии (Flash CS5), до этого люди довольствовались набором собственными руками, что больше утомляет и позволяет допускать больше, так сказать, “детских орфографических ошибок”, по типу вместо “привет” написать “пирвет”). Так же FD компилирует (с помощью Flex SDK, который использует и Flash Pro­fes­sional) код медленновато лишь в первый раз, а затем он все это делает за пару секунд, в отличие от Flash Pro­fes­sional, который каждый раз будет очень, очень, очень, очень, очень, очень, очень медленно компилировать, если проект увесист и нагружен. Более того, Flash Pro­fes­sional имеет любезную привычку иногда вылетать при компиляции, это очень нерадует, так как при увесистом проекте на не самом мощном компе (до обновления у меня было 2 гб оперативы и core2duo 1.86, один проект компилировался по 5–8 минут, что как бы намекало, что я не имел право на ошибку, потому как если ее исправлять “по-быстрячку”, то это обойдется в 5–8 минут ожидания) можно потерять до 30% времени разработки (при хороших обстоятельствах и компиляции только по 5 минут, я имел право только на 12 маленьких правок в час (а бывают моменты, когда правки приходят порционно), что как бы намекает) просто вникуда

2. Ок, уговорил. Где скачать, как начать?
Отвечаю: для этого вам понадобятся целых 4 вещи:
Java — для того, что б запускался Flex SDK (это набор всяких инструментов, но главный из них для нас — компилятор кода). Скорее всего, джава у вас уже есть, но чем шутник не шутит!
Flex SDK — для того, чтоб компилировать код. Скорее всего, не понадобится, так как FlashDe­velop уже умеет его скачивать самостоятельно (но если что, то качайте третью версию)
FlashDe­velop — чтоб программировать
Возможно еще понадобится четвертая вещь, без которой не установится FlashDe­velop — это .net фреймворк 2-й или 3-й версии, но так как он есть у ооочень многих, то им в instal­la­tion гайде почему-то пренебрегли
Flash Player. Качайте все три с подписью debug­ger. Третий по счету, Pro­jec­tor(текущая версия 10, тут виндовый), нужно скачать, а затем просто запустить. А если не поможет, то скачать любой swf файл или найти его на компе, и нажать “открыть с помощью” и выбрать ваш exe файл. Дебаг версии флеш плееров позволяют видеть ошибки во время исполнения флешки. Так что будьте готовы к вечным окошкам с ошибками во время странствований по сайтам. Убедиться, что у вас дебаг версия, можно с помощью нажатия правой кнопки мыши, там будет видно надпись “Show redraw regions” (или области перерисовки по-русски)

На данный момент (а сейчас июль 2011-го года) существуют такие версии вышеописанных вещей: Java 1.6.26, Flex SDK 4 и 4.5.1, FlashDe­velop 4.0.0 beta. Начнем с джавы:

Заходите на http://java.com/ru/, видите кнопку “Скачать Java бесплатно” и качаете Java бесплатно по следующей кнопке “Скачать Java бесплатно”, что будет на другой страничке. Установка не такая сложная, как кажется: достаточно нажимать кнопку Next или Далее

Далее качаете FlashDe­velop по ссылке в желтом прямоугольничке на сайте http://www.flashdevelop.org/ и запускаете установщик флешдевелопа. Во время установки вас спрсоят, какие галочки поставить. В галочках как раз есть Flex SDK и даже Air SDK. Далее указываете, куда хотите сохранить FD и радуетесь жизни. Стоит заметить, что SDK весит около 300 мегабайт, так что если вас расстраивает такой размер на системном диске, то лучше не устанавливайте на системном, а устанавливайте на каком-нибудь другом

Далее впереди вас ждет закачка и установка всего этого добра. А как установится, то запускайте его с помощью нового модного ярлыка, который хоть и непривычен по сравнению с теплым ламповым старым ярлыком, но выглядит прикольно

3. Что дальше? Как вот это вот писать программы?
Давайте создадим новый проект. В меню “файл” есть пункт Project. Там выберите “New Project”. Там появится окошко с красивыми иконками и категориями. Нам нужна категория Action Script 3. В ней выберите AS3 Project. В Name укажите, что это ваш первый в мире проект (не смотрите, что там запятая, от запятой в названии проекта, как выяснилось, могут выскакивать ошибки. В нескольких скриншотах будет видно запятую, но потом ее больше не будет, и это правда), а в поле Loca­tion укажите месторасположение вашей папки с вашим первым в мире проектом. Я это место указал как D:\dev\zero\hello_world.

Когда вы нажмете “ок”, вас спросят еще, как вас зовут. Укажите, как вас зовут. Имя, фамилия, может даже номер кредитной карточки или почта или псевдоним ваш, все подойдет. У меня фд выглядит таким образом:

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

  1. Собсно, само окошко, где пишется код, так же можно заметить некую схожесть на вкладку браузера, это так иесть — это вкладка, их можно как в браузере перелистывать будет
  2. В этой группе панелек под двойкой находится Outline. Эта панелька поможет вам лицезреть все свойства и методы у класса, если вам этого очень захочется. Весьма полезно для беглого осмотра самой основы класса, не вглядываясь в тонны кода
  3. Book­marks полезны для тех, кто любит все метить подряд. Я пользовался этой функцией 1 раз, чтоб узнать, что оно таки работает. Вы помечаете строчку в коде и вуаля, теперь он у вас в bookmarks
  4. В Files вы просто можете глянуть, что у вас за файлы находятся на компьютере. Полезно в том случае, если вам критически лень открывать новое окно с файлами
  5. Самое полезное, Project, позволяет вам осматривать ваши владения по поводу вашего проекта. В нем находятся ваши классы и бинарные файлы, и это хорошо. Через нее удобно создавать новые классы, шаблоны или менять компилируемый файл. Но обо всем этом будет рассказано позже. Просто знайте это все
  6. Это и панель Out­put и вкладка Logs под цифрой “6” одновременно. В логах (как и в панели Output, но в логах при других ситуациях) вы будете видеть всю информацию, что вы захотите послать вам же, для проверки, настройки и прочей работы
  7. В Lay­outs вы можете настраивать виды окон как вам нравится и сохранять их
  8. Results вам подскажет о каких-то ошибках от компилятора или о какой-то иной информации, зачастую от него же
  9. Tasks помогут вам не забыть, где вы решили оставить на потом разработку. В строчке кода, в которой вы захотите оставить задание для самого себя, вы просто пишите “// TODO закончить эту функцию”, ну или другое описание. Это полезно, если вы замучались работать над одним блоком кода, или же вы работаете совместно с кем-то. Вы оставляете списки туду, а затем проверяете, выполнил ли чего оппонент

В остальном же никаких осложнений нет. Давайте осматривать проект. Вы видите, что почти ничего не изменилось с тех пор как вы его создали, кроме как то, что справа в панельке появилось три папки: bin, lib, src. Издавна повелось так, что в bin находится ваша программа, которую вы сделаете, а в lib находятся ваши файлы для создания программы, типа звуков или картинок каких-нибудь, или чего-то в этом роде, а в папке src находится код. Папку src я как раз предлагаю развернуть

Вас, наверное, уже тревожит таинственный Main.as. Это ваш файл кода, в котором следующие несколько статей будете тренироваться писать код. Откройте его (достаточно нажать дважды на этот зелененький файлик). Пред вами находится куча мутного кода, но вы не беспокойтесь, пока что я не заставлю вас понимать все, что там написано. Я предлагаю вам вот что: там, где написано “// entry point”, нажимайте клавишу enter раз 30, чтоб создать кучу белого пустого пространства, дабы вас не пугал лишний код и пока не вызывал лишних вопросов. Примерно так

Итого перед вами пустое поле, которое поначалу не будет вас тревожить. Убедитесь, что вы поставили пробелы правильно (вы пишете между закрывающей и открывающей фигурными скобками, между между четвертой открывающей и второй закрывающей :). Удалять весь этот код нельзя, но можно создать себе пространство

Давайте напишем следующее:

trace("Привет, безумный мир!");

(то, что это функция и что она делает, это вы узнаете позже, но сейчас просто знайте, что все, что находится после trace(“ и перед “;, будет видно внизу)

Теперь самое время компилировать. Для этого приготовлено аж 3 способа: нажать CTRL+ENTER (старый флешерский способ, рекомендую), нажать F5 (флешдевелоперский способ), или же нажать на синий треугольничек в куче иконок. Это для тех, кому лень нажимать кнопки на клавиатуре. Когда вы начнете компилировать, у вас затрещит комп, побегут строчки в панели Output, и в итоге пред вами станет настоящий ваш первый проект, в котором абсолютно ничего нет, кроме как белого пустого окна. Зато это сделали вы, ну не прелесть ли? Но! Но о боги! Что это? Мы видим, что в логах у нас появился наш текст:

Вот он, внизу, черным по белому! Это ваше послание самому себе! Вы смогли это сделать! А теперь пора отдыхать. Нас ждет суровый мир проб, ошибок и кода

Вторые шаги | Как программировать

Допустим, вы приблизительно поняли, как оно начинает все работать и можете встревать в это дело более углубленно, постигая уже само программирование. Стоит напомнить, что программы начинаются с левого верхнего края по правый нижний, все как у нас. Поэтому читать их можно человеческими глазами и понимать, при знании слов и трюков, тоже. Весь код в основном это условия, определения, оговоренности и обращения к прошлому или взывание к каким-то потокам мыслей\действий. Все как в человеческом разговоре. Вернее даже как в детском рисунке. Но в отличие от рисунка, который понимает только ребенок, что нарисовал его, ваше творчество должен понимать другой человек. Потому, что рано или поздно, но вам придется работать совместно с кем-то или отдавать свои исходники или читать чужие. А довольно жирный процент времени на работу с чьим-то исходником выделяется просто ради того, чтоб разобраться в чужом коде. Поэтому тут вы просто обязаны быть предсказуемым кодером. Вы ведь не станете отрицать, что предсказуемый водитель, который включил поворотник и поехал направо (а я видел противоположные случаи, и некая часть моего тела сжималась крайне крепко), это хорошо? Так же само выглядит код, в котором переменная “количествоДомов” обозначает количество домов, а не “жива ли кошка или нет”, или что эта переменная будет всегда обозначать количество домов, а не “вот тут она количество домов, а вот тут я подумал, что можно эту же переменную использовать для обозначения количества людей, живущих на Марсе, а потом опять количество домов. Так же экономнее!”. И вот за эту экономность кто-то платит часами (возможно даже вы), пытаясь разобраться в столь ухищренных трюках, которые по сути экономят десяток байтов в оперативке и пару тактов на процессоре и одну строчку кода. Когда вы будете экономить целые байты и такты, вы будете писать на ассемблере, не на флеше, уверяю. И опыта программирования у вас будет более, чем достаточно (исключаются случаи, когда необходимо сэкономить огромное пожирание памяти или 40% нагрузки на процессор убавить до 2%, убрав странные действия в вашей программе)

Повезло тем, кто начал читать со второго абзаца эту статью, потому как именно в ней я предлагаю приблизиться к первым объяснениям по поводу того, что же это и как это:

1. Переменные и их типы

Что такое переменные и зачем они? Переменная — это то, чем вы оперируете в задаче, а зачем нужны — чтоб оперировать в задаче ими, чтоб решить ее. Выглядит это словно математика. Возьмем в пример программу, в которой вы вводите два числа: количество мальчиков и девочек в классе, а она вам выдаст, сколько в процентах у вас мальчиков и девочек. То есть в программу будет заложена простая формула, по типу

мальчики = (x / (x + y)) * 100;
девочки = (y / (x + y)) * 100;

Где x — число мальчиков (к примеру, 22), а y — количество девочек (допустим, 28). Итого, мальчики = 22 / (22 + 28) * 100 = 44%, девочки 56%. В программе выглядеть будет все так же само:

процентМальчиков = (количествоМальчиков / (количествоМальчиков + количествоДевочек)) * 100;

Как видите, разницы никакой (только вместо x и y тут длинные слова, но зато понятнее стало), эту формулу комп решит и у нас в переменной “процентМальчиков” уже будет храниться процент мальчиков.

Что стоит знать о переменной? Переменная от слова “перемена” (хехехе), это обозначает, что она всегда может поменяться, ей можно задать значение или не задавать его. Так же, как в языке со строгим синтаксисом (википедируйте, но в целом это строгое соблюдение правил письма, к примеру “дом” и “Дом” — разные переменные), у всякой переменной должен быть тип. Для числа это Num­ber, int, uint и прочие, но почти всегда это Num­ber, для строки это String, для звука это Sound, для изображения это Dis­play­Ob­ject и прочее и прочее. По-нашему это как обозначение типа музыки: рок, поп или же классика. Или письма: стихи, прозы, анекдоты, романы. Мы все в своей жизни типизируем и это же перенесли в программирование. Вначале дальше Num­ber и String мы не зайдем, но потом будем даже свои типы переменных сочинять, но всему свое время. Итак, мы знаем, что у переменных должен быть тип. Теперь вы еще должны понять, что переменные должны “объявляться”. Это кажется странным, но зато это логично: вы объявляете переменную, а только потом указываете ей значение. Иначе же будет трудновато понять, это вот с этого момента начали вы создавать переменную или она еще раньше где-то фигурирует? Для этого, перед работой с переменной, люди сначала объявляют саму переменную, как бы заявляя, что теперь она существует и с ней можно работать. По правилам синтаксиса, нельзя объявить одну и ту же переменную больше одного раза. То есть, заданные рамки и ограничения лишь помогают вам. Зачастую, в коде целым блоком объявляются все переменные, а потом по другим блокам растасована работа с ними. При чтении кода это очень удобно, так как можно по названиям их понять, что в целом происходит в коде (если код писали вкладывая смысл в переменные. Мне доводилось работать с чужим кодом, в котором часть переменных была shit и bull­shit. И свой смысл они не очень отражали, было сложно разбираться). А теперь давайте посмотрим маленький пример настоящего AS3 кода:

var previousYear: Number;
var currentYear: Number = 2011;
previousYear = 2010;

Первая строчка: объявление (о чем свидетельствует слово “var”) переменной по имени pre­vi­ousYear (предыдущийГод, по-нашему), ее тип Num­ber (о чем свидетельствует двоеточие и после этого — описание типа (“Num­ber”, то есть число)). Как видите, мы просто объявили эту переменную, и теперь компьютер будет знать, что у нас существует такая переменная и ей можно что-то присвоить. Во второй строчке все то же самое, окромя двух вещей: теперь создана новая переменная по имени cur­ren­tYear (текущий год) и тут уже знак равенства показывает, что мы присвоили переменной число 2011. Третья строчка присваивает переменной pre­vi­ousYear число 2011. Разница между комбо 1–3 строчками и между 2-й строчкой отсутствует (я о том, как присваивать переменным значения). То есть и так и так будет создание и присвоение значения какой-нибудь переменной. Но первый способ годится в тех случаях, когда вам заведомо неизвестно, что же туда всунуть, а левый бред подтасовывать неинтересно и вредно. Давайте рассмотрим переменную, хранящую какое-то строковое значение (по-нашему это текст):

var boyName: String = "Борисон";
var girlName: String = "Машенька";

Как видите, все то же самое, окромя одного момента: вместо Num­ber теперь String, но это и так понятно, но что это за кавычки? А это, дорогой читатель, такой способ указывать строковые значения и попытки ими оперировать. В кавычках пишутся все строковые значения, будь то единичные кавычки или же двойные, компилятор разберется, он умный. Хотя, например, в Си (язык такой) в двойных кавычках можно писать длинный текст, а в одинарных кавычках не более одного символа, то есть “Oche bol­shoi text” можно написать, а ‘Tochno gov­oru, text bolshoi’ нельзя. Во флеше же можно и так и сяк, как вам удобно, главное не совмещать оба типа одновременно. Вернее, можно, но компилятор будет смотреть какой кавычкой открыто, и будет следить, чтоб этой же кавычкой было закрыто. То есть, строчка

var boyName: String = "Борисон';

Вызовет ошибку в программе, потому, что открыта строка с помощью двойных, а закрыта одинарной. В то же время можно пользоваться двойными кавычками внутри одинарных и будет все хорошо:

var boyName: String = 'Борис "Картавый" Самолетов';

… ну или наоборот.

Существуют еще константы. Это то, что можно только один раз создать и объявить сразу же, а потом больше никогда нельзя будет поменять это. Как нельзя изменить скорость света или скорость звука в нашей атмосфере (при условии, что атмосфера никогда не изменится). Константы полезны во многих случаях (например, если вам нужно будет указать где-то скорость света хехехе), по типу, что красный цвет это FF0000RGB коде), или что километр = 1000 метров. Объявляются константы не с помощью “var” а спомощью оператора “const”. А в остальном все так же

const redColor: Number = 0xFF0000;

2. Операции с переменными

Как вы наверное догадываетесь, с переменными можно делать что-то другое, кроме как задавать им значение и объявлять их. Для этого придуманы математические операции. Они вам, скорее всего, знакомы: сложение, вычитание, деление, умножение. Можно приравнивать одну переменную другой или приравнять переменной сложение двух других переменных:

var a: Number = 10;
var b: Number = 5;
var c: Number;
var sum: Number; // сложение
var sub: Number; // вычитание
var div: Number; // деление
var mult: Number; // умножение

c = a;
sum = a + b;
sub = a - b;
div = a / b;
mult = a * b;

С этих строк вы узнаете о следующем: что слеш это деление, что звездочка это умножение, а два слеша — это комментарий. Комментарий не учитывается программой, а лишь помогает программисту не забыть важный момент, который он надумал комментировать. Как видите, управление переменными это просто и понятно. Что примечательно, можно складывать строковые значения (только складывать, ни вычитать или делить или умножать нельзя). Например “Попка” плюс “дурак” будет “Попка дурак”

На этом вступление в объяснение как все происходит я намереваюсь закончить, потому как вам нужна практика, если вы читали весь этот текст всерьез. Всего вам доброго и до встречи в следующих статьях

Первые шаги | Что такое программирование

Привет! Вы читаете что-то типа курса по внедрению в такую технологию, как Adobe Flash и на этом введение я считаю закрытым

Для того, чтоб программировать, иногда стоит понимать хотя бы отдаленно, что такое программирование и зачем оно нужно. Так же хочется предупредить, что без желания и усилий вам не постичь это ремесло (впрочем, без желания и интереса вам вряд ли удастся что-либо постичь вообще, посему лучше будьте честны с собой и хорошенько подумайте: а надо ли вам это? Нравится ли? Тянет ли? (причем “надо” определяется тем самым “нравится ли” и “тянет ли”, потому как лучшее, что придумал человек — заниматься тем, чем нравится и постигать в этом свои высоты и прочее и прочее))

Вторая оговорка, не менее главная — эти статьи не есть инстанция и не квинтэссенция правды и не проверенный источник, на который стоит ссылаться в качестве какой-то серьезной литературы. Воспринимайте это как “научпоп”, и при возможности купите годную книгу по интересующему вас вектору действий. Этим маленьким абзацем я как бы хочу снять с себя всю ответственность за все неточности, иногда абсурдные упрощения или даже ошибки, которые будут допущены в будущих строках и статьях. Первые две вещи (неточности и умопомрачительные упрощения, вызывающих у элиты в программерских кругах боли в определенной области тела) объясняются тем, что я пытаюсь создать легкий порог вхождения в не самую простую сферу, а третья вещь (допущенные ошибки) объясняется тем, что я человек

И прямо сейчас я начну с ужасающих и леденящих душу упрощений, пытаясь объяснить, что же есть программирование и что и как происходит в нем. На самом деле, это не самый простой вопрос, но все же, попытаюсь ответить на него: программирование (в нашем случае это будет всегда флеш и работа с ним, посему иные смыслы приплетать не стоит) — указание машине (компьютеру) ряд действий, который она должна совершить, чтоб выдать вам желаемый результат. Звучит сурово, но можно прибегнуть к такому сравнению, как программирование предложений вашим мозгом: у вас есть слова, и есть мысль, которую вы пытаетесь донести. Используя правила и всяческие лексические трюки, вы выставляете слова в нужном порядке, склоняете их и еще обставляете это препинаниями и ударениями в словах. В сумме выходит предложение, несущее смысл. В программировании все аналогично: у вас есть “слова” (в программинге они зовутся таким понятием, как “операторы”), “препинания и ударения” (можно отнести понятие “синтаксис” в программировании) и вы эти слова и препинания расставляете в логичном порядке, в итоге выходит записанная программа, которую машина потом начинает читать и выполнять

Тут вроде бы все становится ясно, но внезапно наступает вопрос: а как машина понимает, что надо эту программу выполнить именно так? Как это вообще происходит и что за фигня? Это тоже очень сложный вопрос, который описывается не десятком и не сотней страниц общих теорий как программирования, так и компилирования, так и логики и алгоритмизации, даже физики (ведь грубо говоря, всем заправляет радужное управление токами по маленьким-маленьким транзисторам, и в зависимости от того, как и где бегают токи, микросхемы подают друг другу разные комбинации сигналов, и в итоге еще и выводят на микросхемы монитора тоже разные комбинации сигналов, которые потом превращаются в цветные пиксели, которые и дают возможность нам видеть что-либо. То есть, для любителей углубленного понимания придется неплохо насесть на литературу, а в данном случае придется довольствоваться упрощениями и абстрагированием (а абстрагирование — главная сила программиста. Мыслите абстрактно и способны принимать некоторые вещи в уме — быстрее решите задачу или усвоите новую основу чего-либо)). Для начала, давайте вернемся к предыдущему примеру про составление предложения. Вы составили программу — придумали предложение и сказали (или написали на листике) вслух. Чтобы выполнить эту программу, другому человеку достаточно прочитать\услышать ваше сообщение. И дальше у него в мозгу произойдет обработка этих слов и запятых и прочих вещей, что вы там наделали. То есть, аналогично выполнению программы на компьютере, человек читает слова и обращается к своей внутренней “библиотеке” знаний (к примеру, он знает, что слово “крокодил” означает животное, а слово “голодный”, которое он прочел перед словом “крокодил” обозначает, что следующее слово будет связано со словом “голодный”, которое в свою очередь обозначает потребность в пище\энергии) и применяет это к каждому слову и к каждому ряду слов, используя все стандартные свои правила: читать построчно слева направо (всякие Японии в учет в данный момент не берем, а берем в учет то, как вы сейчас читаете текст, слева-направо, сверху-вниз), заканчивать усваивать что-либо или обрабатывать в мозгу образы после каждой точки. Допустим, мы решили написать типичную старую добрую программу “Hello, world” на совершенно новом языке “абсурд++”, вот ее код:

НачатьПрограмму;
создатьПеременную мояСтрока: Строка = "Примет, мир!";
вывестиНаЭкран(мояСтрока);
ЗакончитьПрограмму

Так, как мы прочитаем код этой программы, грубо говоря, прочитает ее и компьютер: сначала идет команда “НачатьПрограмму”, таким образом компьютер начнет понимать, что сейчас ему начнут толкать всякие указания, а он должен будет себе их интерпретировать на понятный себе язык (это дело называется компиляция, но об этом позже). Заметьте, что каждая команда разделяется точкой с запятой. Именно точка с запятой служет разделителем для компьютера. Он прочитал строчку, увидел точку с запятой и обработал эту строчку, затем только он начнет обрабатывать следующую строчку, помня о том, что что-то хранилось в предыдущей строчке, если было такое задание. Далее идет создание переменной (вспоминайте математику, там всякие x, y, z были, они были неизвестными, а тут они известны, но как в математике, так и тут, мы оперируем этими вещами) под названием “мояСтрока”, она имеет тип “Строка” (то есть туда можно записать какой-то текст) и равна эта переменная такому тексту: “Привет, мир!”. Следующей строчкой происходит выполнение секретной функции под названием “вывестиНаЭкран”, и в скобках указывается, что именно надо вывести, туда мы указали нашу переменную “мояСтрока”. Эта функция есть другая программа, которая выводит это дело на экран, она, позвольте утрировать, заложена в базу стандартных приемов, которые машина способна выполнять сама. Последняя строчка говорит машине, что пора заканчивать читать текст программы и пора переводить это дело в исполняющуюся программу

Компиляция
Компиляция это перевод понятного нам кода в машинный. Чтоб было проще, можно утрировать, что эта программа переводится из нашего языка, в нули и единицы. Обработчик, который находится в машине, считает эти комбинации из нулей и единиц и в зависимости от того, что там за вариации нулей с единицами стоят, машина посылает сигналы в разные свои места (то на оперативку, то на видеокарту, то на жесткий диск, то потарахтеть процессором пару тактов). То есть на нашем понятии, компиляция это перевод с одного языка на другой. К примеру, с английского на русский. В наших условиях, мы будем переводить из AS3 (Action­Script — так называется наш язык программирования во флеше, и он уже аж третей версии, начиная с 9-й версии самого флеш плеера) и .swf формат, в котором уже не будет находиться удобочитаемый код для наших глаз (а будет находиться вот такое: И9¶»°\КШл9_rПwсm‰“й‹ЯФЉAµ NлЮЫ€%kg¦GеWЕ¦ї*кZ}ћ”(C? zDOт3°Ёе’Шдўп„БЗA%F\o*рЂюі’Ў4…°нчя Г™єqMсГ‘аIul.їYШµЏжсn—%їЁo). Но вот беда: swf формат это еще не единицы и нолики, а какая-то белиберда. То есть этот код предназначен скорее для наших операционных систем (сначала этот код предназначен для флеш плеера, но флеш плеер потом будет должен передавать команды для нашей ОС (а их несколько, помимо виндовса: Mac OS, Win­dows, и куча юникс систем, типа Linux или FreeBSD)), а только потом уже для самой машины. Это выглядит сложно, но так уж повелось. А если еще сделать на AS3 какой-то компилятор (по типу как работают сохранения в играх. Информация, что лежит в сохранении (к примеру, сколько осталось патронов и жизней, и на какой точке в карте вы находились), то выйдет эдакая аж четырехуровневая компиляция: компьютер — операционная система — флеш плеер — ваша программа по обработке сохранений

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