Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Vektor

Рейтинг: 1.57. Голосов: 7.

Маленькие секреты профессионалов или как упростить написание кода.

Запись от Vektor размещена 15.01.2012 в 10:21
Обновил(-а) Vektor 15.01.2012 в 14:34

Здесь, я бы хотел рассказать о том, как не плодить лишние классы.

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

Что такое Блок?
В блок могут входить несколько классов, но желательно, чтоб эти классы были универсальны, или улучшали читаемость и поддержку кода в будущем.
Блоки - это независимые классы, например, создается игра.
1) Делаем Prealader, блок независимый от того какая игра загружается.
2) Делаем Экран - Начало Игры, здесь игрок может перейти к просмотру рекордов, зарегистрироваться или выбрать своё имя, для новой игры или для загрузки игры, выбрать в какой режим игры играть, если есть такой выбор (здесь нужно создать сохранения и загрузку игроков, которые уже играли в игру или собираются в неё играть).
3) Рекорды – Он считывает результаты, достигнутые в игре, и отображает их на экране.
4) Сама игра – Здесь тоже, можно и нужно разбивать игру на классы, например класс - инвентарь , это отдельный блок, в котором персонаж может менять экипировку, рыться в рюкзаке и так далее, класс - магазин, класс - монстр, класс - ещё чего ни будь, главное не путать Блок-Класс, Класс-функция, и ещё ООП дело хорошее и нужное, но только если, игра большая, или код будет использоваться в продолжении игры, или в поддержке игры долгое время, типа онлайновых игр.

Разбив приложение на блоки, можно каждый блок программировать отдельно, блок получает какие-то данные и сам делает с этими данными что нужно, в не зависимости, от других блоков, и если нужно отдаёт преобразованные данные другому блоку.



Теперь я бы хотел перейти к заглавию статьи.

Код AS3:
addChild();
Все мы знаем, что это такое, но не все знают, как это может упростить написание кода.
Код AS3:
addChild(mcClip);
mcClip.x=100;
mcClip.y=100;
Вроде всё правильно!

А теперь, создадим 10 MovieClip или Sprite.
Ага! понимаете.

Вот функция, которая упростит нам жизнь.
Код AS3:
private function fAddChild(mcClip:*,x:int=0,y:int=0,bMouseEnabled:Boolean=true):void {
	addChild(mcClip);
	mcClip.x=x;
	mcClip.y=y;
	mcClip.mouseEnabled=bMouseEnabled;
}
mcClip.mouseEnabled = false; // Отключает реакцию на мышь.
 
А вот её вызов.
fAddChild(_mcClip);
fAddChild(_mcClip,100,100);
fAddChild(_mcClip,0,0, false);
//Не правда ли что так лучше выглядит.
Теперь создайте Текстовый документ и назовите, к примеру, Заготовки.as и сохраните, там эти функции и их вызов, и каждый раз, когда они вам понадобятся, вы можете скопировать и вставить в свой код.

Код AS3:
private function fAddChildInSprite(mcClip:*,mcClip1:*,x:int=0,y:int=0,bMouseEnabled:Boolean=true):void {
	mcClip.addChild(mcClip1);
	mcClip1.x=x;
	mcClip1.y=y;
	mcClip1.mouseEnabled=bMouseEnabled;
}
fAddChildInSprite(_mcClip, mcClip1,200,200);
 
private function fAddChildArray(amcAddChild:Array,x:int=0,y:int=0,bMouseEnabled:Boolean=true):void {
	for (var i:uint=0; i<=amcAddChild.length-1; i++) {
		addChild(amcAddChild[i]);
		amcAddChild[i].x=x;
		amcAddChild[i].y=y;
		amcAddChild[i].mouseEnabled=bMouseEnabled;
	}
}
private function fAddChildInSpriteArray (mcClip:*,amcAddChild:Array,x:int=0,y:int=0,bMouseEnabled:Boolean=true):void {
	for (var i:uint=0; i<=amcAddChild.length-1; i++) {
		mcClip.addChild(amcAddChild[i]);
		amcAddChild[i].x=x;
		amcAddChild[i].y=y;
		amcAddChild[i].mouseEnabled=bMouseEnabled;
	}
}
private function fRemoveChildInSpriteArray(mcClip:*,amcRemove:Array):void {
	for (var i:uint=0; i<=amcRemove.length-1; i++) {
		mcClip.removeChild(amcRemove[i]);
	}
}
private function fRemoveChildIArray(amcRemove:*):void {
	for (var i:uint=0; i<=amcRemove.length-1; i++) {
		removeChild(amcRemove[i]);
	}
}
Для тех, кто не понимает, как пользоваться Array – функциями, пускай будет домашним заданием.
Всего комментариев 117

Комментарии

Старый 18.01.2012 17:33 crazyone вне форума
crazyone
 
Аватар для crazyone
Цитата:
Я нигде не писал, что я профессионал, все мои знания взяты из книг, и когда я читаю вот такие статьи, то убеждаюсь, что двигаюсь в правильном направлении.
http://winreview.ru/mif-o-frejmvorkax-chast-2/
В этой статье ошибка сразу во введении. Если для повторного использования какого-то метода нужно в него добавить параметры и логические ветвления - значит что-то не так. Нужно остановиться и вместо добавления параметров в существующий метод написать другой метод. А вместо логического ветвления - использовать полиморфизм.
Но посыл верный - усложнение это плохо, универсальные фреймворки - хороши в утопиях, а в реальности - зло.
Старый 18.01.2012 17:35 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
просто они дольше вас занимаются программированием и естественно знают больше вас
Одно с другим не связано.
Старый 18.01.2012 18:12 Vektor вне форума
Vektor
 
Аватар для Vektor
Цитата:
Цитата:
Цитата:
просто они дольше вас занимаются программированием и естественно знают больше вас
Одно с другим не связано.
Человек, который год назад начал, заниматься, программированием, естественно знаем больше того кто только вчера открыл, для себя программирование.
Цитата:
Для тех, кто недавно занялся программированием, для них, те, кто отвечают на их вопросы, кажутся профессионалами, хотя могут не являться таковыми,
Старый 18.01.2012 18:25 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
Человек, который год назад начал, заниматься, программированием, естественно знаем больше того кто только вчера открыл, для себя программирование.
Запятые рэндомно? :о))

Давайте сравним 2 месяца практики и год теории.
Обновил(-а) GBee 18.01.2012 в 18:43
Старый 18.01.2012 18:45 Vektor вне форума
Vektor
 
Аватар для Vektor
Можно сравнить 5лет и год.
И даже 10лет и 5лет.
Два профессионала, один профессиональней другого.
Думаю, так мы зайдем в тупик, и будем там выяснять, кто прав.
Старый 18.01.2012 18:45 in4core вне форума
in4core
 
Аватар для in4core
Давайте !!! )) 2 месяца практики будут круче года теории, хотя 2 месяца наверное маловато, остановлюсь на 3х
Старый 18.01.2012 20:18 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
А я думаю, так: два месяца теории плюс месяц практики, намного круче чем пол года практики.
Поясню почему. На одном форуме приходит человек, который считает что классы - это файлы и начинает задавать разного рода вопросы:
1. как обратится из класса к главной сцене?
2. почему выдает: "ссылка на обьект null"?
3. зачем всегда нужно писать: "extends MovieClip"?
Ему разжевывают что по чем, дают ссылку на интересную статью. Проходит 15 минут - он отписывает что "обьект null?". И засоряет форум еще 20-ю такими же глупыми темами.
Второй человек задает те же вопросы, но параллельно читает К.Мука. Статью по данной ссылке штормит два дня.
Проходит пол года и первая личность задает те же нелепые вопросы. И видно, что не происходит никакого прогресса. Он дальше не имеет понятия, что такое дисплейлист, и почему stage всегда равен null. Он понятия не имеет что такое наследование и класс, потому что все время занимается копипастингом.
Второй же в это время мало чего знает и слышал, но он оперирует гораздо лучше терминами языка. А самое главное - у него есть то, от чего ему завидуют все "копипастеры", "декомпилеры" и "форумотроллеры": он понимает что он делает.
Обновил(-а) HardCoder 18.01.2012 в 20:32
Старый 18.01.2012 20:31 Котяра вне форума
Котяра
 
Аватар для Котяра
Прекрасно сказанно!
Старый 18.01.2012 21:07 ProxyGreen вне форума
ProxyGreen
 
Аватар для ProxyGreen
Цитата:
stage всегда равен null
Начинаю чувствовать себя тем пацаном из "шестого чувства" D:<
Старый 18.01.2012 21:13 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
Цитата:
Цитата:
stage всегда равен null
Начинаю чувствовать себя тем пацаном из "шестого чувства" D:<
Не совсем понимаю, так как очень давно смотрел . Но по поводу stage - я имел в виду: до тех пор пока не добавится обьект в список отображения. На одном форуме (не буду заниматься рекламой) - если подобная тема не обсуждалась хотя бы раз в день - это праздник.
Старый 18.01.2012 21:40 GBee вне форума
GBee
 
Аватар для GBee
Во времена гугла, ходить на форум по маленькому вопросу - моветон. :о))
Все это субъективно.
Старый 18.01.2012 21:43 ProxyGreen вне форума
ProxyGreen
 
Аватар для ProxyGreen
Цитата:
Не совсем понимаю, так как очень давно смотрел
я... Я вижу умершие объекты D:

Цитата:
до тех пор пока не добавится обьект в список отображения.
Ну его можно просто передать в конструктор или через публичный метод. Вообще со стейджем не обязательно же наследники DisplayObject могут работать.
Старый 18.01.2012 21:44 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Цитата:
Во времена гугла, ходить на форум по маленькому вопросу - моветон. :о))
Все это субъективно.
Правила поведения в сети не преподают.
Старый 18.01.2012 21:49 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
Правила поведения в сети не преподают.
Нам в институте толкнули одну пару
http://ru.wikipedia.org/wiki/%D1%E5%...F2%E8%EA%E5%F2

;о)
Старый 18.01.2012 22:00 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
GBee, спасибо за ссылку, не думал, что есть на эту тему статья в вики.
А подобные лекции читать не в ВУЗах надо, а в школе, а то и в детском саде начинать готовить подрастающее поколение.
Старый 18.01.2012 22:07 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
Цитата:
Правила поведения в сети не преподают.
Но, независимо от этого в каждом сообществе со временем возникают определенные нормы. Допустим, человек заходит на форум флешеров, показывает свой код и говорит что "выдает ссылку на обьект null". Конечно все зависит от обстоятельств, но если взять тот же stage, его слова можно интерпретировать так: "Граждане! Ослепните, пожалуйста, за монитором, разбирая мои 184 строчки кода, потому что у меня в аутпуте говорит что "ссылка на обьект null", но мне в западло прочитать что там пишет дальше и посмотреть в какой строчке ошибка, или в какой функции и какой метод вызвал эту функцию. Мне лень протрейсить каждую переменную и понять в чем проблема". ИМХО - это как минимум не прилично.
Старый 21.01.2012 06:37 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Только что вернулся из Европы, всем привет!
Я ещё успел?
 

 


Часовой пояс GMT +4, время: 17:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.