Индусам и не снилось
От: Bigger Российская Империя  
Дата: 24.07.07 14:37
Оценка:
Правлю кодж за одним товарищем, смешного много, но это

if (ds.Tables[0].Rows[0]["idrole"] != null && 
            Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 && 
            new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
{
           _role = new UserRole(new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
}


автор учитесь

Программист — это шаман..., подарите бубен!
Re: Индусам и не снилось
От: fddima  
Дата: 24.07.07 14:47
Оценка:
Здравствуйте, Bigger, Вы писали:

if (ds.Tables[0].Rows[0]["idrole"] != null && 
            Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 && 
            new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
{
           _role = new UserRole(new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
}


я на выделенном завис...
Re[2]: Индусам и не снилось
От: Bigger Российская Империя  
Дата: 24.07.07 14:50
Оценка:
Здравствуйте, fddima, Вы писали:

skip
Пардон, маленький коментарий — ds.Tables[0].Rows[0]["idrole"] — первичный ключ

Программист — это шаман..., подарите бубен!
Re: Индусам и не снилось
От: Дм.Григорьев  
Дата: 24.07.07 14:52
Оценка: :)
Здравствуйте, Bigger, Вы писали:

B>
B>if (ds.Tables[0].Rows[0]["idrole"] != null && 
B>            Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 && 
B>            new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
B>{
B>           _role = new UserRole(new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
B>}
B>


Гламурненько.


Все языки полны по тьюригу... стало быть на любом ЯП можно создать ужасный код.

(с) VladD2
Автор: VladD2
Дата: 28.03.07
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re: Индусам и не снилось
От: prVovik Россия  
Дата: 24.07.07 14:55
Оценка:
Здравствуйте, Bigger, Вы писали:

B>Правлю кодж за одним товарищем, смешного много, но это


B>
B>if (ds.Tables[0].Rows[0]["idrole"] != null && 
B>            Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 && 
B>            new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
B>{
B>           _role = new UserRole(new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
B>}
B>


B>автор учитесь


Предположу, что изначально написанный код глючил, и каким-то образом появлялись UserRole с Guid.Empty. В результате, автор добавил строчку для "профилактики"
лэт ми спик фром май харт
Re: Индусам и не снилось
От: elmal  
Дата: 24.07.07 14:56
Оценка: 1 (1) +3
Здравствуйте, Bigger, Вы писали:

B>автор учитесь

Ничего выдающегося, обычный код начинающих (а иногда и не начинающих, если им по рукам за такое не били), не имеющий национальности. На шедевр, достойный опубликования, не тянет .
Re[2]: Индусам и не снилось
От: Bigger Российская Империя  
Дата: 24.07.07 15:00
Оценка:
Здравствуйте, elmal, Вы писали:

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


B>>автор учитесь

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

Опубликовать более достойное нельзя, автор может расстроится.
Код в стиле фортран, когда выполнение одного метода расстянуто по 3-6 классам

Программист — это шаман..., подарите бубен!
Re: Индусы - трудолюбивые (фото-50К)
От: Xander Zerge Россия www.zerge.com
Дата: 24.07.07 15:47
Оценка: :)))
Здравствуйте, Bigger, Вы писали:

B>автор учитесь


Если в индийском помещении несколько ламп, выключатели выглядят так:


Отсюда: http://tema.ru/travel/india-2/
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[2]: Индусы - трудолюбивые (фото-50К)
От: Xander Zerge Россия www.zerge.com
Дата: 24.07.07 15:52
Оценка: :)))
Забыл добавить от себя — это оператор switch-case, любовь к которому приписывается индусам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re: Индусам и не снилось
От: Ромашка Украина  
Дата: 24.07.07 18:26
Оценка: :))
Bigger пишет:
> if (ds.Tables[0].Rows[0]["idrole"] != null &&
> Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 &&
> new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
> {
> _role = new UserRole(new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
> }

Чето мне подсказывает что конструктор UserRole выглядит где-то так, а
студент просто не осознал разницы между null и DBNull:

public UserRole(guid userGuid)
{
    if (userGuid == null)
        throw new ArgumentNullException("bla-bla-bla");
    if (userGuid == Guid.Empty)
        throw new ArgumentException("bla-bla-bla");
}


Однако, ежели по-взрослому, код должен выглядеть так:
if (     ds != null &&
    ds.Tables != null &&
    ds.Tables.Count > 0 &&
    ds.Tables[0] != null &&
    ds.Tables[0].Rows != null &&
    ds.Tables[0].Rows.Count > 0 &&
    ds.Tables[0].Rows[0] != null &&
    ds.Tables[0].Rows[0]["idrole"] != null &&
    ds.Tables[0].Rows[0]["idrole"] != DBNull.Value &&
    Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 &&
    new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
{
    _role = new UserRole(new 
Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
}


Этот шаблон програмирования называется maniac pattern.
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[3]: Индусы - трудолюбивые (фото-50К)
От: Awaken Украина  
Дата: 24.07.07 19:16
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Забыл добавить от себя — это оператор switch-case, любовь к которому приписывается индусам.


это расширенный вариант знаменитой задачки на интервью из Майкрософт?
Re[2]: Индусам и не снилось
От: Aviant  
Дата: 25.07.07 06:38
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Этот шаблон програмирования называется maniac pattern.


Не самый плохой паттерн кстати. Лучше чем "я точно знаю что в этот метод все переменные придут проинициализированные как надо"
Re[3]: Индусам и не снилось
От: viellsky  
Дата: 25.07.07 07:04
Оценка:
Здравствуйте, Aviant, Вы писали:

A>Здравствуйте, Ромашка, Вы писали:


Р>>Этот шаблон програмирования называется maniac pattern.


A>Не самый плохой паттерн кстати. Лучше чем "я точно знаю что в этот метод все переменные придут проинициализированные как надо"

Ну если так — то в паттерне не хватает throw ArgumentException на все неожиданные значения.
Re[4]: Индусам и не снилось
От: Ромашка Украина  
Дата: 25.07.07 17:08
Оценка: :))
viellsky пишет:
> Ну если так — то в паттерне не хватает throw ArgumentException на все
> неожиданные значения.

Живо себе представил:

public UserRole(Guid userGuid)
{
...............
    if (userGuid.ToString == "{B2A91D68-C182-4A43-8FC8-00C3F27A1321}")
        throw new ArgumentException("Этот гуид занят");
    if (userGuid.ToString == "{86FC8A70-77A7-4D9B-8B48-EC4230E444C9}")
        throw new ArgumentException("Этот гуид занят");
    if (userGuid.ToString == "{AD0FE067-8B88-428B-B62D-46D4132ED663}")
        throw new ArgumentException("Этот гуид занят");
    if (userGuid.ToString == "{374D2CE1-1567-460A-8692-84007BCFA2FF}")
        throw new ArgumentException("Этот гуид занят");
    if (userGuid.ToString == "{5291D024-5F36-456F-9E35-7B34881D9DC7}")
        throw new ArgumentException("Этот гуид занят");
    if (userGuid.ToString == "{CF54D104-5E7F-4240-9384-C214D092B1E5}")
        throw new ArgumentException("Этот гуид занят");
    if (userGuid.ToString == "{8B397B4E-174A-4427-A7BF-CD588AAB2F64}")
        throw new ArgumentException("Этот гуид занят");
......
}


... и так пару миллиардов раз....
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[2]: Индусам и не снилось
От: Roman Odaisky Украина  
Дата: 25.07.07 21:15
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Однако, ежели по-взрослому, код должен выглядеть так:

Р>
Р>if (     ds != null &&
Р>    ds.Tables != null &&
Р>    ds.Tables.Count > 0 &&
Р>    ds.Tables[0] != null &&
Р>    ds.Tables[0].Rows != null &&
Р>    ds.Tables[0].Rows.Count > 0 &&
Р>    ds.Tables[0].Rows[0] != null &&
Р>    ds.Tables[0].Rows[0]["idrole"] != null &&
Р>    ds.Tables[0].Rows[0]["idrole"] != DBNull.Value &&
Р>    Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 &&
Р>    new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
Р>{
Р>    _role = new UserRole(new 
Р>Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
Р>}
Р>


<flame>

А в C++ это может быть сделано куда проще:
enforce(enforce(enforce(enforce(enforce(enforce(ds).Tables)[0]).Rows)[0])["idrole"])

</flame>
До последнего не верил в пирамиду Лебедева.
Re[2]: Индусы - трудолюбивые (фото-50К)
От: The Lex Украина  
Дата: 25.07.07 21:56
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

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


B>>автор учитесь


XZ>Если в индийском помещении несколько ламп, выключатели выглядят так:

XZ>

XZ>Отсюда: http://tema.ru/travel/india-2/


Ага. Зато у наших все несколько выключателей расбросаны по всему помещению с никому неизвестной логикой — причем некоторые выключатели ничего не выключают, а некоторые лампы ничем не выключаются...

Знакомо? У меня в доме на этаже именно так.
А еще я видел немало программного кода, в котором "много-много выключателей"...
А как бы вы реализовали подобную задачу: "в помещении несколько ламп"?
Голь на выдумку хитра, однако...
Re[3]: Индусы... не, наши
От: Xander Zerge Россия www.zerge.com
Дата: 26.07.07 00:39
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Ага. Зато у наших все несколько выключателей расбросаны по всему помещению с никому неизвестной логикой — причем некоторые выключатели ничего не выключают, а некоторые лампы ничем не выключаются...

Это бардак просто. У Лебедева в "идиотеке" таких примеров много. Вот:

http://www.artlebedev.ru/kovodstvo/idioteka/2007/07/11/
http://www.artlebedev.ru/kovodstvo/idioteka/2007/07/05/
http://www.artlebedev.ru/kovodstvo/idioteka/2007/06/14/
http://www.artlebedev.ru/kovodstvo/idioteka/2007/05/31/
http://www.artlebedev.ru/kovodstvo/idioteka/2007/04/06/
http://www.artlebedev.ru/kovodstvo/idioteka/2007/02/03/
http://www.artlebedev.ru/kovodstvo/idioteka/2007/02/01/

TL>Знакомо? У меня в доме на этаже именно так.

Не, не знакомо. На службе было максимум три выключателя даже в большой аудитории. Дома в подъезде один выключатель внизу.

TL>А еще я видел немало программного кода, в котором "много-много выключателей"...

Я это и имел ввиду.

TL>А как бы вы реализовали подобную задачу: "в помещении несколько ламп"?

По линиям делятся и всё. Если с фантазией, то можно и по строкам, и по столбцам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[3]: Индусам и не снилось
От: _FRED_ Черногория
Дата: 31.07.07 05:32
Оценка:
Здравствуйте, Aviant, Вы писали:

Р>>Этот шаблон програмирования называется maniac pattern.


A>Не самый плохой паттерн кстати. Лучше чем "я точно знаю что в этот метод все переменные придут проинициализированные как надо"


Не "я точно знаю…" , а
  1. "Если переменные придут непроинициализированными, то тот, кто вызвал его вызвал должен будет справедливо получить по рукам"
  2. "Если случится исключение, то мы ещё посмотрим кто не прав. Может не автор данного кода, не тот, кто его вызывает, а тот, кто создал этот самый датасет"

Суть заключается не в коде как таковом, а в контракте метода\класса\коллера. Код может быть написан как угодно (с проверками или без), главное, что бы это соответствовало его контракту и этот контракт не был бы непродуманным или плохопродуманным.

А "maniac pattern" — это проглатывание (зачастую своих же собственных) ошибок. От такого паттерна следующий шаг:
try {
  // … some operations I …
} catch(Exception ex) {
}//try

// … some operations II …

Help will always be given at Hogwarts to those who ask for it.
Re: Индусам и не снилось
От: _FRED_ Черногория
Дата: 31.07.07 05:51
Оценка:
Здравствуйте, Bigger, Вы писали:

B>Правлю кодж за одним товарищем, смешного много, но это

B>if (ds.Tables[0].Rows[0]["idrole"] != null && 
B>            Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 && 
B>            new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
B>{
B>           _role = new UserRole(new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
B>}

B>автор учитесь

ИМХО, ничего страшного. Более чем поправимо. Человеку надо просто показать, как произвести проверку поэлегантнее.
B>if(!ds.Tables[0].Rows[0].IsNull("idrole")) {
    //…


Гораздо более строгого порицания, на мой взгляд, заслуживает тот факт, что Guid.Empty используется как какое-то "специальное значение".
Вот это уже точно "клиника" и неграмотность. Это точно такой же гуид, как и все остальные. Рассматривать, по крайней мере, его следует именно так. И если где-то он _по ошибке_ появляется, то надо избегать именно того "ошибочного" случая, а не ставить проверки и обосабливать такое значение.

То же самое, зачастую, можно сказать и про String.Empty, когда речь идёт о чем-то БазаДанных-подобном. Есть строковое поле, "первичный ключ", как было сказано. Она должна быть либо DbNull либо непустая строка. Это же бизнес-правило, правильно я понимаю? Так значит надо давать по ушам тому, кто позволил сохранить невалидные значения (в датасете, в рассматриваемом случае) и поругать того, кто это "пропустил", не заметил нарушения бизнес-правила.

Если же бизнес-правила у вас такие, что "первичный ключ" может быть пустой строкой или не нулевым гуидом или null или DbNull, то это странные правила .
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Индусам и не снилось
От: elmal  
Дата: 31.07.07 07:14
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Однако, ежели по-взрослому, код должен выглядеть так:

Р>
Р>if (     ds != null &&
Р>    ds.Tables != null &&
Р>    ds.Tables.Count > 0 &&
Р>    ds.Tables[0] != null &&
Р>    ds.Tables[0].Rows != null &&
Р>    ds.Tables[0].Rows.Count > 0 &&
Р>    ds.Tables[0].Rows[0] != null &&
Р>    ds.Tables[0].Rows[0]["idrole"] != null &&
Р>    ds.Tables[0].Rows[0]["idrole"] != DBNull.Value &&
Р>    Convert.ToString(ds.Tables[0].Rows[0]["idrole"]).Length != 0 &&
Р>    new Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) != Guid.Empty)
Р>{
Р>    _role = new UserRole(new 
Р>Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])));
Р>}
Р>


Р>Этот шаблон програмирования называется maniac pattern.

А мне как-то кажется, что этот и оригинальный шаблон называется copy-paste паттерн. Самое плохое в этом коде то, что невыделены переменные, у куча значений вычисляется несколько раз. Даже если компилятор оптимизирует — нечитабельно это совершенно. А тут на Guid.Empty все накинулись. Неужели так много народа практикуют запись типа Guid(Convert.ToString(ds.Tables[0].Rows[0]["idrole"])) и считает это нормальным ?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.