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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.09.2012, 11:39
Awesomni вне форума Посмотреть профиль Отправить личное сообщение для Awesomni Найти все сообщения от Awesomni
  № 1  
Ответить с цитированием
Awesomni
 
Аватар для Awesomni

Регистрация: Sep 2012
Сообщений: 14
The bomb! Почему мне отказали? - качество кода

Друзья, недавно, интереса ради, пытался сменить работу и в качестве собеседования у меня попросили посмотреть мой код.
Я выслал работодателю следующий класс:
Код AS3:
package obstacles
{
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import PointsConfig;
 
 
	public class Sankship extends MovieClip implements IObstacle
	{
 
		private var t:Timer = new Timer(350,0);
		private var e3:Boolean;
 
		public function Sankship()
		{
			e3 = Object(this).root.getGameState() == "3";
			if ((Object(this).root.artefact == 2) && e3)
			{
				t.start();
				t.addEventListener(TimerEvent.TIMER, checkCrush);
			}
		}
		private function checkCrush(e:TimerEvent):void
		{
			if (e3)
			{
				if (this.hitTestObject(Object(this).root.ship_mc))
				{
					Object(this).root.scorepoints +=  PointsConfig.SANKSHIP;
					Object(this).root.scoreboard_mc.update();
					this.dispose();
				}
			}
		}
		public function dispose():void
		{
			t.stop();
			if (t.hasEventListener(TimerEvent.TIMER))
			{
				t.removeEventListener(TimerEvent.TIMER,checkCrush);
			}
			this.parent.removeChild(this);
		}
	}
 
}
И ответ был следующим:
Цитата:
Уважаемый Николай!
К сожалению, мы пока не готовы предложить Вам свою вакансию.
Ниже комментарий нашего специалиста:

"Кода мало, и то что есть - средне. И даже могу точно сказать, что если бы мы так писали, то поддерживать приложения было бы почти невозможно".
Объясните, пожалуйста, в чём мои ошибки и как их исправить?

Старый 19.09.2012, 11:43
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
http://www.flasher.ru/forum/showthread.php?t=138349

Старый 19.09.2012, 11:46
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 3  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Код AS3:
Object(this).root.
- что вот этот кусок значит, по вашему? Почему он именно такой?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 19.09.2012, 11:49
Awesomni вне форума Посмотреть профиль Отправить личное сообщение для Awesomni Найти все сообщения от Awesomni
  № 4  
Ответить с цитированием
Awesomni
 
Аватар для Awesomni

Регистрация: Sep 2012
Сообщений: 14
Цитата:
Сообщение от -De- Посмотреть сообщение
Код AS3:
Object(this).root.
- что вот этот кусок значит, по вашему? Почему он именно такой?
Я не знаю другого способа обратиться к самому первому ролику, к прародителю всех роликов..
Подскажите, как я должен был поступить?

Добавлено через 5 минут
Цитата:
Сообщение от -De- Посмотреть сообщение
Код AS3:
Object(this).root.
- что вот этот кусок значит, по вашему? Почему он именно такой?
Понял, Вас смутило приведение к типу Object. Почему я так делаю, я не знаю.

Старый 19.09.2012, 11:56
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 5  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Судя по комментарию- как минимум, за наличие магических чисел.

Старый 19.09.2012, 12:04
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Архитектура приложения, откуда выдран класс, очевидно неверная. Никаких обращений к родителям. Только родители решают, что им делать с подопечными.
__________________
тут я

Старый 19.09.2012, 12:05
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. Ничего не значащие имена переменных (назовите их нормально). Вместо "t", что-то типа updateTimer, хотя не понятно что он вообще делает в этом классе.
2. "Магические числа". Заведите константы для состояний и не сравнивайте числа как строки.
3. Постоянные обращения к вышестоящим объектам. Это нарушение принципа инкапсуляции.
4. Объект сам себя удаляет.
Цитата:
Подскажите, как я должен был поступить?
Нет никакой необходимости дергать родителя напрямую. game state и artefact можно было передать в конструктор объекта, а checkCrush должен проверять вышестоящий (или специальный) класс.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 19.09.2012, 12:06
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 8  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
> Объясните, пожалуйста, в чём мои ошибки и как их исправить?
Кода действительно мало. И то, что есть, плохое.

1. Обращение к объектам с логикой через DisplayList (это все ваши Object(this).root). А вдруг ваш root будет потом вложен в другой контейнер (мало ли, как изменятся требования)? Нужные объекты нужно через конструктор передавать и работать напрямую.
2. Вашему Sankship совершенно необязательно наследовать MovieClip. Он может создавать нужный клип и кто-то (он сам или пользователь класса) будет добавлять ui в список отображения. А сам класс останется контроллером.
3. Не понятно, кто такой IObstacle и зачем его implements ваш класс. Вроде бы методов из интерфейса нет. А маркер-интерфейсы обычно не нужны.
4. Совершенно не понятно, кто такое e3. Серьезно. Название должно отображать его логику.
5. Кто такие "2" и "3" - тоже не понятно. Это должны быть именованные константы. Литералы допустимы только в "натуральном" контексте. Это математика (там уместны числа, когда их назначение более-мене ясно). И строковые литералы для случаев, когда их содержимое явно обозначает назначение (т.е. константа звалась бы примерно так же, как сам литерал).
6. Самоубийство из DisplayList. Это плохо и, вероятно, не нужно. Удалять должен пользователь класса. Или сам класс, если он является контроллером и имеет ссылки на контейнер и UI.
7. Зачем у вас проверка t.hasEventListener(TIMER)? Она не нужна. removeEventListener вроде бы не ругается, если слушатель не существует. А вот у removeChild там же никакой проверки нет, хотя как раз parent может быть null (мало ли, кто еще ваш объект удалил из display list). К тому же dispose является публичной, так что может быть вызвана несколько раз (один раз из вашего обработчика таймера, например).
8. В checkCrush лично мне не нравится большая вложенность. if(!e3) return;
9. Там же какие-то поползнования и вызовы методов через display list. См. п. 1. Да и объект для hitTestPoint можно передавать в конструкторе, а не доставать из display list.

Добавлено через 2 минуты
> Понял, Вас смутило приведение к типу Object. Почему я так делаю, я не знаю.
Ну так разберитесь, зачем вы это делаете. Вы должны быть в состоянии объяснить любое (абсолютно любое) решение в коде (выбор архитектуры/дизайна, выбор структур данных и алгоритом, выбор конкретных действий в коде). Программист должен хорошо понимать, как работает программа. Иначе нет никаких гарантий, что она вообще работает.

Старый 19.09.2012, 12:30
Awesomni вне форума Посмотреть профиль Отправить личное сообщение для Awesomni Найти все сообщения от Awesomni
  № 9  
Ответить с цитированием
Awesomni
 
Аватар для Awesomni

Регистрация: Sep 2012
Сообщений: 14
Спасибо всем за ответы. Буду работать над собой.

Старый 19.09.2012, 12:38
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 10  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Не пишите то, что не знаете как работает. Давайте нормальные имена переменным. Не используйте магических чисел.
Вот для начала.
К Object лучше вообще не приводить, это "я не знаю, что это за штука и молюсь, чтоб у неё было то, к чему я обращаюсь". this.root - это ваш Document Class, к нему приводите. Ну и вообще советов уже понадавали) Про MVC я бы попозже разбирать советовал только.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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