Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 14.09.11 10:43
Оценка:
Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер

Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.

http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js

Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: Оцените пожалуйста и мой код
От: mogikanin Россия  
Дата: 14.09.11 10:47
Оценка: +1
S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.

Есть шанс, только зачем столько комментов в коде. От них в глазах рябит.
Re[2]: Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 14.09.11 10:51
Оценка:
Здравствуйте, mogikanin, Вы писали:

S>>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.


M>Есть шанс, только зачем столько комментов в коде. От них в глазах рябит.


Ну я боялся что кто-то ещё будет со мной пилить клиент и ничего не поймёт
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: Оцените пожалуйста и мой код
От: Roman Odaisky Украина  
Дата: 14.09.11 10:58
Оценка: 9 (1)
Здравствуйте, Sorc17, Вы писали:

S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js


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

В комментариях хорошо бы прояснять, какие именно эффекты имеет каждая функция, сейчас методы изменяют состояние класса как хотят и неясно, что может измениться после вызова данной функции, а что нет.
До последнего не верил в пирамиду Лебедева.
Re: Оцените пожалуйста и мой код
От: monax  
Дата: 14.09.11 11:09
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js


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

  1. В конце строк нет ; если код будет в таком виде отправлен клиенту, то ок, а если его нужно будет прогнать через упаковщик, то могут быть проблемы.
  2. Переменные объявляются в начале методов, а используются в конце. Тут у каждого свой вкус, я объявляю переменные непосредственно перед их использованием.
  3. Разные типы комментариев для полей. Это усложняет автоматическую генерацию документации.
     /**
         * Идентификатор игрока.
         */
        this.id = id;
    
        // Положение относительно карты в клетках по ширине.
        this.j = j;

  4. Обе функции создают объекты? Если да, то почему разный подход?
    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
    }
Re[2]: Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 14.09.11 11:17
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>по-паскалевски сваленные в начало функции


По работе часто пишу на Си (без ++) Наследие прошлого!

RO>непоследовательное использование точек с запятой (если всегда их ставить, сообщения об ошибках в случае неверной расстановки скобок будут намного понятнее).


А точки с запятой значит всё же лучше ставить? Я по началу везде ставил, но потом понял что можно не ставить и перестал. Видимо зря

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


Да, мне и самому это не нравится. Даже сейчас, пока кода не много, когда я собираюсь использовать поле какого-то класса, я начинаю напрягаться и думать: а могу ли я его использовать и на что это может повлиять. Приходится Find Usages делать и смотреть. Наверное совсем без этого никак, но неприятный осадок где-то в глубине души остаётся.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: Оцените пожалуйста и мой код
От: UA Украина  
Дата: 14.09.11 11:19
Оценка: +3 -1
Здравствуйте, Sorc17, Вы писали:

JS не тру язык, оценить на нем мастерство и полет мысли невозможно. Какой код на нем не напиши, он будет выглядеть всегда как быдлокод.
Re[2]: Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 14.09.11 11:29
Оценка:
Здравствуйте, monax, Вы писали:

Ох, в WayPoint я поленился добавить проверку. Надо исправить.

Спасибо за отзыв!
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[3]: Оцените пожалуйста и мой код
От: wander  
Дата: 14.09.11 11:38
Оценка: 10 (2)
Здравствуйте, Sorc17, Вы писали:

S> RO>по-паскалевски сваленные в начало функции


S> По работе часто пишу на Си (без ++) Наследие прошлого!


Многие почему-то не знают, что в Си (без ++) переменные определяются вначале блока, любого, а не только функции. То есть:
void foo()
{
   int a = 0;
   if(a == 0)
   {
       int b = 1;
       // some code...
   }
   // some code...
}
avalon 1.0rc3 build 426, zlib 1.2.3
Re[2]: Оцените пожалуйста и мой код
От: Roman Odaisky Украина  
Дата: 14.09.11 12:03
Оценка:
Здравствуйте, UA, Вы писали:

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


JS трее всех трых. Там функции — первоклассные объекты, что еще нужно для счастья?
До последнего не верил в пирамиду Лебедева.
Re[4]: Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 14.09.11 12:55
Оценка: -2
Здравствуйте, 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++ [смех].
Re: Оцените пожалуйста и мой код
От: uuu84  
Дата: 14.09.11 13:36
Оценка:
Оформление неплохое. Но я вижу потенциальный баг: перемещения фигур завязаны на пиксели, а скорость измеряется в пикселях в миллисекунду. Это плохо, ибо создаёт проблемы с масштабированием игрового поля. Решение очевидно: нужно отделить "функциональную карту" от её графического представления т.е. координатами фигуры должны быть игровые клетки или субклетки ("виртуальные пиксели").
Re: Оцените пожалуйста и мой код
От: elmal  
Дата: 14.09.11 13:57
Оценка: +1
Здравствуйте, Sorc17, Вы писали:

S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.

По такому коду сложно судить, тем более это JavaScript, там свои особенности. Но могу сказать, что пишешь лучше 80% людей, отучившихся 5 лет в институте и имеющих опыт работы 2 года. Лично я особо ничего такого страшного не нашел (а я придирчивый). Единственно — переменные лучше не объявлять в паскалевском стиле, как тебе сказали. Нужна паременная — объяви как можно ближе к месту использования и сразу присвой значение.
Re[2]: Оцените пожалуйста и мой код
От: Miroff Россия  
Дата: 14.09.11 14:10
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Вроде прилично. Бросаются в глаза объявления переменных, по-паскалевски сваленные в начало функции (лучше ставить var при первом использовании)


Это крокфордовская конвенция. Малость устарела, но вполне годная. Аргументируется тем, что в отличие от привычных языков в JS не block scope поэтому объявление переменных в блоке может здорово смутить программиста не читавшего стандарта.
Re[3]: Оцените пожалуйста и мой код
От: __kot2  
Дата: 14.09.11 15:01
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, UA, Вы писали:
UA>>JS не тру язык, оценить на нем мастерство и полет мысли невозможно. Какой код на нем не напиши, он будет выглядеть всегда как быдлокод.
RO>JS трее всех трых. Там функции — первоклассные объекты, что еще нужно для счастья?
а разве это логично?
Re: Оцените пожалуйста и мой код
От: -VaS- Россия vaskir.blogspot.com
Дата: 14.09.11 18:09
Оценка:
Это ужас:

function Player(id, mapId, j, i, name, spriteLoader, speed)

В динамических языках аргументы нужно именовать особенно тщательно. И их очень-очень много.
Re[4]: Оцените пожалуйста и мой код
От: Roman Odaisky Украина  
Дата: 14.09.11 18:54
Оценка:
Здравствуйте, __kot2, Вы писали:

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

RO>>JS трее всех трых. Там функции — первоклассные объекты, что еще нужно для счастья?
__>а разве это логично?

Не понял вопроса, но возможность передавать функции аргументами и возвращать функции из функций очень важна. Посмотри хотя бы на jQuery.
До последнего не верил в пирамиду Лебедева.
Re: Оцените пожалуйста и мой код
От: Безон Великобритания  
Дата: 14.09.11 20:09
Оценка:
Странно, что функции не вынесены в прототип, вроде же они одинаковые для всех объектов типа Player?

Здравствуйте, Sorc17, Вы писали:

S>Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер


S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.


S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js


S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.
-----
Re: Оцените пожалуйста и мой код
От: zakima Канада  
Дата: 14.09.11 21:08
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер


S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.


S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js


S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.


Мне кажется, что лучше переменные называть нормально, а не использовать однобуквенные переменные. Как результат комментариев будет нужно меньше и когда смотришь на переменную в коде, то не нужно будет постоянно идти наверх и смотреть что же она значит.
Re: Оцените пожалуйста и мой код
От: _Obelisk_ Россия http://www.ibm.com
Дата: 15.09.11 04:51
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Что-то зачастили темы с просьбами оценить качество кода и я решил тоже создать. А что? Я тоже хочу чтобы мне сказали что я ни на что не годный б***локодер


S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.


S>http://code.google.com/p/iivgprg/source/browse/trunk/client/Player.js


S>Есть ли шанс стать хорошим программистом или я 5 лет в институте и 2 года работы программистом на разных работах потратил зря? Яваскрипт изучал сам по справочникам и гуглу.


Много комментариев. Лучше использовать говорящие имена перменных/функций и стараться избегать тавтологий в духе

/**
 * Идентификатр карты, на котрой находится игрок.
*/
    this.mapId = mapId



Душа обязана трудиться! (с) Н.Заболоцкий.
Re: Оцените пожалуйста и мой код
От: sergey.p. Великобритания  
Дата: 15.09.11 07:55
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Вот, отдаю на суд тем кому не лень заглянуть в чужой код свою писанину на яваскрипте. Это класс игрока для для одной простенькой РПГшки, в которой пока ничего нельзя делать кроме как ходить по карте и чатится в чате.


Забавно что есть комментарии для строк типа

    /**
     * Имя игрока.
     */
    this.name = name;


но нет для гораздо более неочевидных, где вычисляются корни, что-то делится, умножается, складывается.
Т.е. собственно логика не прокомментирована. А имена переменных лучше вместо комментарий, понятнее назвать
       s = wp2.v * (t - wp1.t)
        S = wp2.diag ? Math.sqrt(2) * CELL_W : CELL_W
        ds = s / S
        dx = wp2.x - wp1.x
        dy = wp2.y - wp1.y
        _dx = ds * dx
        _dy = ds * dy

        this.x = wp1.x + _dx
        this.y = wp1.y + _dy
        newi = Map.getCellIOnMap(this.y + CELL_HH)
        newj = Map.getCellJOnMap(this.x + CELL_HW)
        if (newi != this.i || newj != this.j) {
            this.j = newj
            this.i = newi
            this.pathC = this.pathC.slice(1)
        }
Re: Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 15.09.11 14:08
Оценка:
Спасибо все за отзывы! Очень полезно для меня оказалось. Тред сохранил, со временем всё учту и починю
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[2]: Оцените пожалуйста и мой код
От: BulatZiganshin  
Дата: 15.09.11 15:35
Оценка:
Здравствуйте, _Obelisk_, Вы писали:

_O_>Много комментариев. Лучше использовать говорящие имена перменных/функций и стараться избегать тавтологий в духе

_O_> * Идентификатр карты, на котрой находится игрок.
_O_> this.mapId = mapId

можно поинтересоваться, с какого языка this.mapId переводится как "Идентификатр карты, на котрой находится игрок"?
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Оцените пожалуйста и мой код
От: Злобастик  
Дата: 16.09.11 05:53
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Спасибо все за отзывы! Очень полезно для меня оказалось. Тред сохранил, со временем всё учту и починю


Еще почитай "Совершенный код" МакКоннела, в голове яснее будет. Мастрид для начинающего. Большинство данных тебе советов содержатся в той книге.
Re: Оцените пожалуйста и мой код
От: vodoo  
Дата: 20.09.11 15:08
Оценка:
Вставлю свои 5 копеек:


// Эту функцию можно вызвать только как конструктор (с new).
if (this.constructor !== arguments.callee) {
  throw new Error("Constructor called like a simple function!");

Также эта проверка не позволит нормально реализовать наследование от вашего класса.


this.nameWidth = null;
...
this.path = null
...
this.pathC = null


Вот эти строки, ИМХО, лишние, это же javascript


// Пройденное расстояние между соседними точками пути, где находится
// игрок.
var s
// Полное расстояние между соседними точками пути, где находится
// игрок.
var S

Это дело вкуса, конечно, но имена переменных одной буквой в разном регистре обычно обфускаторы типа YUI делают, чтобы максимально код запутать
Re[2]: Оцените пожалуйста и мой код
От: Sorc17 Россия  
Дата: 20.09.11 15:13
Оценка:
Здравствуйте, vodoo, Вы писали:

V>Вставлю свои 5 копеек:



V>
V>// Эту функцию можно вызвать только как конструктор (с new).
V>if (this.constructor !== arguments.callee) {
V>  throw new Error("Constructor called like a simple function!");
V>

V>Также эта проверка не позволит нормально реализовать наследование от вашего класса.

Хммм. Об этом не подумал


V>
V>this.nameWidth = null;
V>...
V>this.path = null
V>...
V>this.pathC = null
V>


V>Вот эти строки, ИМХО, лишние, это же javascript


Просто хотел, чтобы поля класса были собраны в одном месте. А то потом попробуй сыщи где там в теле какого метода новое поле появляется.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: Оцените пожалуйста и мой код
От: Панда Россия  
Дата: 20.09.11 16:06
Оценка:
Может, дурацкое замечание, но мне почему-то резануло глаз. Очень странно видеть, чтобы параметры, названные i и j, передавались в обратном алфавитном порядке "j, i".

Тут есть два подхода:
1. Можно рассматривать их как декартовы координаты, тогда надо назвать их x, y (первая координата по ширине, вторая координата по высоте)
2. Можно рассматривать их как индексы в матрице, тогда передавать в порядке i, j (первый индекс — номер строки, второй индекс — номер столбца) При работе с матрицами нумеровать так — общепринятая практика, и то, что первой идет "координата по высоте" не должно смущать.

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