Форум 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

Комментарии

Старый 16.01.2012 20:53 in4core вне форума
in4core
 
Аватар для in4core
Ты имеешь ввиду типа x=x ? ну да это моветон. читать то неудобно
Старый 16.01.2012 21:04 goodguy вне форума
goodguy
именно
Старый 16.01.2012 21:25 Котяра вне форума
Котяра
 
Аватар для Котяра
Моветон - это пукнуть при дамах. А пробелами выделять - это необходимость.
Старый 16.01.2012 22:30 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
Почти всегда пишу Math.sqrt(x*x + y*y) и очень раздражаюсь, когда при переводе строки редактор внаглую форматирует =)
Старый 16.01.2012 22:31 etc вне форума
etc
 
Аватар для etc
Какой кошмар.
Старый 16.01.2012 23:04 iNils вне форума
iNils
 
Аватар для iNils
Не читаю код без пробелов
Старый 16.01.2012 23:19 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
По поводу удаления детей. removeChildren() не катит?
Старый 17.01.2012 04:30 Stitch512 вне форума
Stitch512
Цитата:
По поводу удаления детей. removeChildren() не катит?
Господа, вы далеко ушли от контекста рассужения. Всяко использование чего либо бывает оправданно в данной контекстной связи, главное чтобы вы сумели обосновать факт его испольования - это означает что вы уверены и знаете что делаете.
Старый 17.01.2012 04:33 Stitch512 вне форума
Stitch512
Цитата:
Почти всегда пишу Math.sqrt(x*x + y*y) и очень раздражаюсь, когда при переводе строки редактор внаглую форматирует =)
Это в настройках регулируется (если вы во FlashDevelop работаете), а вообще есть официальный стандарт от адоба - стараюсь ему придерживаться, и я считаю что это более правильно чем изобретать свои, либо брать из других языков.
Старый 17.01.2012 08:36 Vektor вне форума
Vektor
 
Аватар для Vektor
Я пишу так, потому что когда надо так, я ни секунды не задумываюсь, почему мой код не правильно работает, выработался автоматизм.
Код AS3:
for (var i:int  =  amcRemove.length-1; i  >=  0;  i--) {
Я, даже и забыл почему, в каких-то случаях, код перестаёт правильно работать.

Откуда, у меня выработалась, такая концепция насчет блоков!
Совершенный код, 2-е изд.djvu 79стр. Наверно отсюда + UML – Шаблоны проектирования.
Может названия не совпадают, но суть от этого не меняется.

Цитата:
82 ЧАСТЬ II Высококачественный код

Придерживайтесь одного разумного правила: диаграмма системного уровня
вроде той, что показана на рис. 5-5, должна быть ациклическим графом. Иначе
говоря, программа не должна содержать циклических отношений, при которых класс
А использует класс В, класс В использует класс С, а класс С — класс А.
При работе над крупными программами и программными комплексами
проектирование на уровне подсистем просто необходимо. Если вам кажется, что ваша
программа достаточно мала, чтобы проектирование на уровне подсистем можно
было пропустить, хотя бы примите это решение осознанно.
Здесь, я бы хотел, обратить внимание, на принцип блочной архитектуры, не плодить лишние классы, если они не универсальны, и выносить код в другие классы, если в этом нет большой необходимости, о чем я писал в блоге.
Блок должен состоять из двух трех классов. //Не считая стандартных классов, языка, на котором вы пишете код.
Как, например Болт-гайка-шайба.
Если будет больше намного больше, то надо спросить, а не пытаетесь ли вы, впихнуть туда, как можно больше функционала, и не проще ли это сделать в отдельном блоке.
Обновил(-а) Vektor 17.01.2012 в 09:59
Старый 17.01.2012 10:59 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
Цитата:
Господа, вы далеко ушли от контекста рассужения. Всяко использование чего либо бывает оправданно в данной контекстной связи, главное чтобы вы сумели обосновать факт его испольования - это означает что вы уверены и знаете что делаете.
Статья для начинающих. А новичек возьмет этот код, сохранит себе и будет вызывать его когда нужно и не нужно. Поэтому, когда приводятся примеры кода, можно хотя-бы обьяснить когда эти приведенные функции рационально использовать, а когда нет. Или акцентировать, что это лишь пример как проектировать, а не как добавлять и удалять детей. И если уж приведен пример кода, то надо прокомментировать его, обьяснив, что функции fRemoveChildInSpriteArray и fRemoveChildIArray рационально использовать лишь в тех случаях, когда: нужно удалить определенное количество обьектов и не нужно их обнулять и обнулять ссылки на их родителя. В противном случае есть стандартный метод, который это делает.
Обновил(-а) HardCoder 17.01.2012 в 11:03
Старый 17.01.2012 18:15 Astraport вне форума
Astraport
 
Аватар для Astraport
В Flash CS5 есть же code snippet. Почти тоже самое
Старый 17.01.2012 18:33 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
Цитата:
Маленькие секреты профессионалов
не тянет на профессиональный секрет.
Старый 17.01.2012 20:21 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
Совершенный код
2Vektor - рано вам такие книжки читать.
У вас каша в голове.
Старый 17.01.2012 20:55 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
2Vektor - рано вам такие книжки читать.
У вас каша в голове.
Почему же, можно добавить инфы. И потом при достижении порога, ЧПОК - инсайт! Или во сне, как у Дмитрия Ивановича, хитрое подсознание разложит все по полочкам.
Старый 17.01.2012 21:07 in4core вне форума
in4core
 
Аватар для in4core
Нифига круче всего моя история. В 2003 году я начал изучать флеш, правда писал не программы, а собирал сторонними прогами мини сайты. Потом начал писать на ас2(1) простейшие веши по урокам типа гото энд плей и активно брал готовые исходники, не понимая , что там написано. В итоге по-моему в 2005 я создал свой первый сайт в IDE на ас2, где 80% составляющих были исходники ( причем не сложные для рядового программиста ) - в которых я не понимал ничего. То-есть ровно до 2005 года у меня не было базы в программировании даже на уровне, что я не понимал как работает цикл и зачем он нужен. А дальше самое интересное :
Я понял, что программы это не мое, и бросил флеш ровно на год, занимался графикой, 3д и т.д. при этом не читал ни книг по программингу , тоесть вообще ничего не знал и знать не хотел. в 2006-2007 , в один прекрасный день я решил снова начать прогить, через 2 дня - я понял, что я знаю и понимаю все, что писал раньше. С того момента я не прочитал ни одной книги по коддингу, я просто знал что я делаю, тоесть можно так сказать на меня сошло озарение - откуда не возьмись я понял как работают цикла, что такое лоадеры и т.п. Есть мнение что работа с исходниками отложила в моей голове базу, которая сама по себе там закешировалась, но да хрен его знаеет. в итоге уже в 2008 я пишу первую игру в ВК, без единой подсказки ( а может и были, но совсем мало ) - все по Докам и т.д. причем на ас2. Ну а дальше просто прочтя 2 главы книги мука, перешел на ас3. - который собственно изучил* ( не хвалюсь ) за 2 месяца где то по адоб справке, ну + форум, вопросы нубские...ниче, конечно я и щас не гений-евгений, но сказать, что я добился много - могу
Старый 17.01.2012 21:13 in4core вне форума
in4core
 
Аватар для in4core
А вот щас похвалюсь и по негодую) Вообщем то мне все довольно легко дается по жизни, я и профф музыкант, немного художник, хорошо осведомлен в дизайне и мошн-графике ( 3д , АЕ) и даже книги пробовал писать. Но минус есть большой, лень и быстрое надоедание* занятиями, собственно поэтому я часто остановливаюсь на точке 60-70% в деле, а не 90-100 )
Старый 17.01.2012 21:15 artcraft вне форума
artcraft
 
Аватар для artcraft
отличная идея - обучение программированию по методу Илоны Давыдовой
Старый 17.01.2012 22:49 Котяра вне форума
Котяра
 
Аватар для Котяра
2 in4core - нимб не жмёт?
Старый 17.01.2012 22:57 in4core вне форума
in4core
 
Аватар для in4core
What is нимб?
Старый 17.01.2012 23:06 in4core вне форума
in4core
 
Аватар для in4core
Вики ответила. А с чего ему жать? С того, что я не добиваюсь макс успехов в каждом деле, но пол дела всегда делаю? или просто не внимательно прочел?) А с коддингом - чистая правда, ни слова лжи. как было так и описал
Старый 17.01.2012 23:23 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
What is нимб?
Старый 17.01.2012 23:28 in4core вне форума
in4core
 
Аватар для in4core
А че смешного, я вот в религиозных примочках ваще нуб, Gbee, а что такое арпеджио?
Старый 17.01.2012 23:41 GBee вне форума
GBee
 
Аватар для GBee
Без понятия, думаю что-нить с музыкой связано. Если атеист, то ладно, тогда не так смешно.
Старый 17.01.2012 23:42 Котяра вне форума
Котяра
 
Аватар для Котяра
вообще-то арпеджо, не путай с адажио
Старый 17.01.2012 23:43 GBee вне форума
GBee
 
Аватар для GBee
in4core, без обид, но вы знатный трололо :о))))
Старый 17.01.2012 23:53 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
знатный трололо
Не то слово. Почётный. Без него скучно.
Старый 17.01.2012 23:58 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
вообще-то арпеджо, не путай с адажио
Я то не путаю , а Вы ?)))
Старый 18.01.2012 00:04 crazyone вне форума
crazyone
 
Аватар для crazyone
Цитата:
Вики ответила. А с чего ему жать? С того, что я не добиваюсь макс успехов в каждом деле, но пол дела всегда делаю? или просто не внимательно прочел?) А с коддингом - чистая правда, ни слова лжи. как было так и описал
С того, что твое самомнение ни в один нимб вместиться не способно.
Старый 18.01.2012 00:04 Котяра вне форума
Котяра
 
Аватар для Котяра
Фиг знает, во время моей юности употребляли термин АРПЕДЖО
Старый 18.01.2012 00:20 cleptoman вне форума
cleptoman
 
Аватар для cleptoman
Корыч, а давай в президенты!
Старый 18.01.2012 00:23 in4core вне форума
in4core
 
Аватар для in4core
Не вопрос_ за меня все равно все проголосуют )) хотя бы ради прикола)

Котяра, термин то понятный, я не понял причем тут адажио - как медленная скорость исполнения. тоесть к чему это было сказано я не понял
Старый 18.01.2012 00:25 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
С того, что твое самомнение ни в один нимб вместиться не способно.
С чего вы решили, что самомнение мое высоко? Помоему я ни разу не выражал свою точку зрения в таком ключе, без юмора. Другой вопрос, что большинство не может распознать юмор и серьезность, поэтому ваши трололо меня тока веселят, не меньше чем Вас, когда вы думаете, что с вами разговаривают серьезно) оу
Старый 18.01.2012 00:31 crazyone вне форума
crazyone
 
Аватар для crazyone
Откуда не возьмись я понял: да ты же одно из воплощений Эрика Картмана!
Старый 18.01.2012 00:37 СлаваRa вне форума
СлаваRa
 
Аватар для СлаваRa
2 crazyone,
Старый 18.01.2012 00:42 in4core вне форума
in4core
 
Аватар для in4core
шутка смешная. до слюней
Старый 18.01.2012 00:57 Котяра вне форума
Котяра
 
Аватар для Котяра
НЕНАВИСТЬ!
Старый 18.01.2012 01:02 in4core вне форума
in4core
 
Аватар для in4core
ЛЮБОВЬ!
Старый 18.01.2012 01:10 crazyone вне форума
crazyone
 
Аватар для crazyone
Ну, ты же помнишь эту серию, где Картман стырил шутку про рыбные палочки.
Цитата:
— Знаешь что? я тебе верю.
— Правда?
— Да. Я верю, что ты веришь, что помог написать эту шутку. Так работают мозги у таких как ты. У тебя такое эго, что оно на все пойдет, лишь бы себя защитить. Люди с охреневшим эго могут сами себя убедить, что они самые шикарные, самые талантливые, хотя на самом деле они просто мешки с дерьмом.
Старый 18.01.2012 01:16 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
crazyone
Я конечно понимаю, что у нас тут блоги — эдакие вольные степи вдалеке от цензуры и все такое. Но тут уже начинается переход на личности и оскорбления за гранью допустимого.
Старый 18.01.2012 01:20 Котяра вне форума
Котяра
 
Аватар для Котяра
Бестыч прав [x]
Старый 18.01.2012 01:32 crazyone вне форума
crazyone
 
Аватар для crazyone
С чего вы решили, что тут были оскорбления? Помоему я ни разу не выражал свою точку зрения в таком ключе, без юмора. Другой вопрос, что большинство не может распознать юмор и серьезность.
Старый 18.01.2012 01:37 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
crazyone, я горжусь тем, что не могу распознать юмор в сравнении собеседника с мешком дерьма.
Старый 18.01.2012 01:39 Astraport вне форума
Astraport
 
Аватар для Astraport
"С чего вы решили, что самомнение мое высоко?" - сказал in4core и скопировал fRemoveChildInSpriteArray в текстовый документ.
Старый 18.01.2012 01:41 crazyone вне форума
crazyone
 
Аватар для crazyone
Цитата:
crazyone, я горжусь тем, что не могу распознать юмор в сравнении собеседника с мешком дерьма.
Да это же просто цитата из Южного Парка. Я никого с мешками не сравнивал.
Старый 18.01.2012 01:46 in4core вне форума
in4core
 
Аватар для in4core
Последний шутки совсем не понял, но хочу посмеяться тоже, проясните пожалуйста.

Zebestov , честно говоря собеседники типа crazyone меня обидеть вряд ли могут, ибо интеллектуальными собеседниками я их не нахожу априори. Как не старайся, от этого человека ни умных постов, ни хороших подсказок по факту другим людям я не видел, смотря хотя бы на этом форуме. [x] too
Старый 18.01.2012 02:12 GBee вне форума
GBee
 
Аватар для GBee
Вроде блог Вектора, а все движутся в каком угодно направлении, кроме заданного. Экая ирония.
Старый 18.01.2012 02:18 Astraport вне форума
Astraport
 
Аватар для Astraport
Зайдут иностранцы, посмотрят код, увидят сотню комментариев в обсуждении кода и сделают выводы об уровне российских программистов
Старый 18.01.2012 02:19 crazyone вне форума
crazyone
 
Аватар для crazyone
Что нам оценки уровня от иностранцев? Лишь бы Корыч оценил.
Старый 18.01.2012 17:14 Vektor вне форума
Vektor
 
Аватар для Vektor
Вчера у меня интернет перестал работать, а тут такого понаписали, не надо насмехаться над людьми, которые пытаются рассказать свою историю. Если вы расскажите свою историю то будьте сто процентов уверены, найдутся те, кто посмеется над вами.
Про себя.
Я нигде не писал, что я профессионал, все мои знания взяты из книг, и когда я читаю вот такие статьи, то убеждаюсь, что двигаюсь в правильном направлении.
http://winreview.ru/mif-o-frejmvorkax-chast-2/

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

 


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


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