Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер
Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.
Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
Есть шанс, только зачем столько комментов в коде. От них в глазах рябит.
Здравствуйте, mogikanin, Вы писали:
S>>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
M>Есть шанс, только зачем столько комментов в коде. От них в глазах рябит.
Ну я боялся что кто-то ещё будет со мной пилить клиент и ничего не поймёт
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Вроде прилично. Бросаются в глаза объявления переменных, по-паскалевски сваленные в начало функции (лучше ставить var при первом использовании), и непоследовательное использование точек с запятой (если всегда их ставить, сообщения об ошибках в случае неверной расстановки скобок будут намного понятнее).
В комментариях хорошо бы прояснять, какие именно эффекты имеет каждая функция, сейчас методы изменяют состояние класса как хотят и неясно, что может измениться после вызова данной функции, а что нет.
Сам код оставил нормальное впечатление. Но есть у меня несколько замечаний:
В конце строк нет ; если код будет в таком виде отправлен клиенту, то ок, а если его нужно будет прогнать через упаковщик, то могут быть проблемы.
Переменные объявляются в начале методов, а используются в конце. Тут у каждого свой вкус, я объявляю переменные непосредственно перед их использованием.
Разные типы комментариев для полей. Это усложняет автоматическую генерацию документации.
/**
* Идентификатор игрока.
*/
this.id = id;
// Положение относительно карты в клетках по ширине.
this.j = j;
Обе функции создают объекты? Если да, то почему разный подход?
function Player(id, mapId, j, i, name, spriteLoader, speed) {
// Эту функцию можно вызвать только как конструктор (с new).
if (this.constructor !== arguments.callee) {
throw new Error("Constructor called like a simple function!");
}
............
/**
* Точка пути.
*/
function WayPoint(x, y, v, t, diag) {
this.x = x // X координата точки пути.
this.y = y // Y координата точки пути.
this.v = v // Скорость движения в эту точку пути из предыдущей точки пути в пикселях в милисекунду.
this.t = t // Время прибытия в эту точку пути.
this.diag = diag // Лежит ли эта точка пути и предыдущая точка пути на диагонали.
return this
}
Здравствуйте, Roman Odaisky, Вы писали:
RO>по-паскалевски сваленные в начало функции
По работе часто пишу на Си (без ++) Наследие прошлого!
RO>непоследовательное использование точек с запятой (если всегда их ставить, сообщения об ошибках в случае неверной расстановки скобок будут намного понятнее).
А точки с запятой значит всё же лучше ставить? Я по началу везде ставил, но потом понял что можно не ставить и перестал. Видимо зря
RO>В комментариях хорошо бы прояснять, какие именно эффекты имеет каждая функция, сейчас методы изменяют состояние класса как хотят и неясно, что может измениться после вызова данной функции, а что нет.
Да, мне и самому это не нравится. Даже сейчас, пока кода не много, когда я собираюсь использовать поле какого-то класса, я начинаю напрягаться и думать: а могу ли я его использовать и на что это может повлиять. Приходится Find Usages делать и смотреть. Наверное совсем без этого никак, но неприятный осадок где-то в глубине души остаётся.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Здравствуйте, UA, Вы писали:
UA>JS не тру язык, оценить на нем мастерство и полет мысли невозможно. Какой код на нем не напиши, он будет выглядеть всегда как быдлокод.
JS трее всех трых. Там функции — первоклассные объекты, что еще нужно для счастья?
Здравствуйте, wander, Вы писали:
W>Здравствуйте, Sorc17, Вы писали:
S>> RO>по-паскалевски сваленные в начало функции
S>> По работе часто пишу на Си (без ++) Наследие прошлого!
W>Многие почему-то не знают, что в Си (без ++) переменные определяются вначале блока, любого, а не только функции. То есть: W>
W>void foo()
W>{
W> int a = 0;
W> if(a == 0)
W> {
W> int b = 1;
W> // some code...
W> }
W> // some code...
W>}
W>
А в старых стандартах было нельзя :3 Видимо с тех времён так и остались рекомендации писать переменные в начале функции. Так же говорят о том, что полезно переменные объявлять в начале функции чтобы они сразу были на виду. Наследие в общем.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Оформление неплохое. Но я вижу потенциальный баг: перемещения фигур завязаны на пиксели, а скорость измеряется в пикселях в миллисекунду. Это плохо, ибо создаёт проблемы с масштабированием игрового поля. Решение очевидно: нужно отделить "функциональную карту" от её графического представления т.е. координатами фигуры должны быть игровые клетки или субклетки ("виртуальные пиксели").
Здравствуйте, Sorc17, Вы писали:
S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
По такому коду сложно судить, тем более это JavaScript, там свои особенности. Но могу сказать, что пишешь лучше 80% людей, отучившихся 5 лет в институте и имеющих опыт работы 2 года. Лично я особо ничего такого страшного не нашел (а я придирчивый). Единственно — переменные лучше не объявлять в паскалевском стиле, как тебе сказали. Нужна паременная — объяви как можно ближе к месту использования и сразу присвой значение.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Вроде прилично. Бросаются в глаза объявления переменных, по-паскалевски сваленные в начало функции (лучше ставить var при первом использовании)
Это крокфордовская конвенция. Малость устарела, но вполне годная. Аргументируется тем, что в отличие от привычных языков в JS не block scope поэтому объявление переменных в блоке может здорово смутить программиста не читавшего стандарта.
Здравствуйте, Roman Odaisky, Вы писали: RO>Здравствуйте, UA, Вы писали: UA>>JS не тру язык, оценить на нем мастерство и полет мысли невозможно. Какой код на нем не напиши, он будет выглядеть всегда как быдлокод. RO>JS трее всех трых. Там функции — первоклассные объекты, что еще нужно для счастья?
а разве это логично?
Здравствуйте, __kot2, Вы писали:
UA>>>JS не тру язык, оценить на нем мастерство и полет мысли невозможно. Какой код на нем не напиши, он будет выглядеть всегда как быдлокод. RO>>JS трее всех трых. Там функции — первоклассные объекты, что еще нужно для счастья? __>а разве это логично?
Не понял вопроса, но возможность передавать функции аргументами и возвращать функции из функций очень важна. Посмотри хотя бы на jQuery.
Странно, что функции не вынесены в прототип, вроде же они одинаковые для всех объектов типа Player?
Здравствуйте, Sorc17, Вы писали:
S>Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер
S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.
S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js
S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
Здравствуйте, Sorc17, Вы писали:
S>Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер
S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.
S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js
S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
Мне кажется, что лучше переменные называть нормально, а не использовать однобуквенные переменные. Как результат комментариев будет нужно меньше и когда смотришь на переменную в коде, то не нужно будет постоянно идти наверх и смотреть что же она значит.
Здравствуйте, Sorc17, Вы писали:
S>Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер
S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.
S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js
S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
Много комментариев. Лучше использовать говорящие имена перменных/функций и стараться избегать тавтологий в духе
/**
* Идентификатр карты, на котрой находится игрок.
*/this.mapId = mapId