Индусский и китайский код с примерами :)

Темы, не попавшие ни в одну из категорий

Модераторы: AnDy, Maxx

Индусский и китайский код с примерами :)

Сообщение Maxx » 12 сен 2008, 11:41

Индусский код — жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste», «главное завалить — а там запинаем», «шапкозакидательство». Так же известен как «write only», или (в пику принципу «написано однажды — читается везде») — «написанное однажды — лучше не читать»

Пример индусского кода (С#)

Пример 1:
Код: Выделить всё
uint i;

if (i.ToString().Length == 1)
{
  ...
}


Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i < 10. Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется ее длина. Если число больше 9, то его десятичная запись содержит больше одного символа. Отрицательные числа переменная типа uint содержать не может. Проверку проходят лишь числа от 0 до 9.

Алгоритм ресурсоемок, неочевиден и не поддается сопровождению даже теоретически.

Пример 2:
Код: Выделить всё
double rest(float a, float b)
{float res=a*b;
for (int i=0; i<999999999; i++)
if (i<=res && i+1>res) {res = res-i; break;}
return res;
}


Далеко не сразу можно понять, что этот код выделяет дробную часть произведения a*b. кроме того, функция выдаст ошибочное значение при a*b>999999999 или a*b<0. Также зависимость времени выполнения от величины целой части тоже не радует.

Пример 3:
Код: Выделить всё
bool IsNumber (string str)
{
return (str.Replace ("0", "").Replace ("1", "").Replace ("2", "").Replace ("3", "").Replace ("4", "").Replace ("5", "").Replace ("6", "").Replace ("7", "").
Replace ("8", "").Replace ("9", "").Length == 0);
}


Хотя в данном случае, вообще говоря, алгоритм вполне очевиден, не менее очевидно и то, что для его выполнения конструктор класса string будет вызван не менее десяти раз, со всеми вытекающими из этого последствиями. И всё только потому, что какому-то индусу было лень придумать менее ресурсоёмкую альтернативу.

Пример 4:
Код: Выделить всё
bool value;



if (value.ToString().Length == 4)
{
  ...
}


В этом примере проверка истинности значения логической переменной производится с помощью длины её текстового представления. Если длина равна четырём („true“), значение истинно.

По рассказам программистов, именно код, который писали индусы (жители Индии), отличается подобными «гениальными» решениями в области алгоритмизации и программирования. Конечно, это не значит, что все остальные нации безгрешны в этом отношении. Cуществует так же версия, что в Индии индусы не пишут индусский код, а поют и танцуют его

Kитайский код

Kитайский код – стиль написания программного обеспечения, нарушающий принцип НПС ("Не Повторяй Себя"). Китайский подход к программированию требует эксплицитного отказа от циклов, локальных переменных, любых процедур и условных выражений, а так же использования технологии cut-and-paste чуть менее, чем везде.

Возьмем, допустим, следующий кусочек программы на C:
Код: Выделить всё
int arr[10];
int i;
for (i = 0; i < 10; i++) {
  arr[i] = 0;
}


Типичный программист в китайском стиле напишет это так:
Код: Выделить всё
int a0 = 0;
int a1 = 0;
int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;
int a6 = 0;
int a7 = 0;
int a8 = 0;


и в дальнейшем будет использовать a0, a1, a2, a3, a4, и т.д. Например, вместо
Код: Выделить всё
if (x < 10) arr[x] = x;


будет
Код: Выделить всё
if (x == 0) {
a0 = x;
}
else if (x == 1) {
  a1 = x;
}
else if ( x == 2) {
...
}


Пример #1, приведенный выше
Код: Выделить всё
uint i;

if (i.ToString().Length == 1)
{
  ...
}


приверженец китайской методы перепишет так:
Код: Выделить всё
if (i == 0 || i == 1 || i == 2 || i == 3 || i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) {
    // произвести еще одну бессмысленную операцию
}


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

Если программист в китайском стиле и напишет процедуру, то вероятность того, что результат ее деятельности будет совершенно бесполезным, стремится к единице.
Аватара пользователя
Maxx
Старейшина
 
Сообщения: 713
Зарегистрирован: 09 ноя 2004, 20:48
Откуда: Киев

Re: Индусский и китайский код с примерами :)

Сообщение DisableD » 12 сен 2008, 16:32

int a0 = 0;
int a1 = 0;
int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;
int a6 = 0;
int a7 = 0;
int a8 = 0;

Нас даже в уневере за такую запись ругают))
Не котлеты, не сметана не зменят мне метана!
http://powerlifting-upf.org.ua
Допинг, это когда заметили. А пока не заметили, это витамины!
Если курить вредно, а пить противно, но умирать здоровым жалко,
ЗАНИМАЙСЯ ПАУЭРЛИФТИНГОМ
Аватара пользователя
DisableD
Засидевшийся
 
Сообщения: 1824
Зарегистрирован: 25 дек 2005, 09:56
Откуда: Никополь - Днепропетровск

Re: Индусский и китайский код с примерами :)

Сообщение Doc » 13 сен 2008, 12:52

Знаем такое дело.... вот такой индусский код попался мне (((:
Код: Выделить всё
function EmptyString(){
return "";
}

были ещё всякие примеры, но толком уже и не помню (:
программист-тунеядец
Изображение
Изображение
Изображение
Аватара пользователя
Doc
Интернет-Параноик
 
Сообщения: 4087
Зарегистрирован: 08 ноя 2004, 09:43
Откуда: Днепропетровск

Re: Индусский и китайский код с примерами :)

Сообщение Maxx » 15 сен 2008, 13:16

Код: Выделить всё
void get_tomorrow_date( struct timeval *date )
{
  sleep( 86400 ); // 60 * 60 * 24
  gettimeofday( date, 0 );
}
Аватара пользователя
Maxx
Старейшина
 
Сообщения: 713
Зарегистрирован: 09 ноя 2004, 20:48
Откуда: Киев

Re: Индусский и китайский код с примерами :)

Сообщение Doc » 20 ноя 2008, 07:55

очередной индокитай :lol:
Код: Выделить всё
function getPosInt($a) {
    $tmp=0;
    for ($i=0;$i<=$a;$i++) { $tmp++; }
    return $tmp;
}

function getInt($a) {
    $tmp=$a;
    if ($a<0) { $tmp=0-$a; }
    else {$tmp=$a; }
    $tmp2=getPosInt($tmp);
    return $tmp2;
}

$a=getInt(2);
$b=getInt(-3);
$c=$a+$b;
программист-тунеядец
Изображение
Изображение
Изображение
Аватара пользователя
Doc
Интернет-Параноик
 
Сообщения: 4087
Зарегистрирован: 08 ноя 2004, 09:43
Откуда: Днепропетровск

Re: Индусский и китайский код с примерами :)

Сообщение Doc » 20 ноя 2008, 07:57

а это мне напомнило старый добрый анекдот про ассемблерщиков ((((:
Код: Выделить всё
unset($a);

if (isset($a)) {
   unset($a);
}
программист-тунеядец
Изображение
Изображение
Изображение
Аватара пользователя
Doc
Интернет-Параноик
 
Сообщения: 4087
Зарегистрирован: 08 ноя 2004, 09:43
Откуда: Днепропетровск

Re: Индусский и китайский код с примерами :)

Сообщение Maxx » 20 ноя 2008, 15:19

Doc писал(а):очередной индокитай :lol:
Код: Выделить всё
function getPosInt($a) {
    $tmp=0;
    for ($i=0;$i<=$a;$i++) { $tmp++; }
    return $tmp;
}

function getInt($a) {
    $tmp=$a;
    if ($a<0) { $tmp=0-$a; }
    else {$tmp=$a; }
    $tmp2=getPosInt($tmp);
    return $tmp2;
}

$a=getInt(2);
$b=getInt(-3);
$c=$a+$b;


А что должен делать этот код? :)
Аватара пользователя
Maxx
Старейшина
 
Сообщения: 713
Зарегистрирован: 09 ноя 2004, 20:48
Откуда: Киев

Re: Индусский и китайский код с примерами :)

Сообщение Maxx » 20 ноя 2008, 15:21

Doc писал(а):а это мне напомнило старый добрый анекдот про ассемблерщиков ((((:
Код: Выделить всё
unset($a);

if (isset($a)) {
   unset($a);
}


Нашел кусок кода у нас в проекте:
Код: Выделить всё
if (!isset($a)) {
   unset($a);
}

Афтар еще собирался доказать что без этого кода работать не будет :)
Аватара пользователя
Maxx
Старейшина
 
Сообщения: 713
Зарегистрирован: 09 ноя 2004, 20:48
Откуда: Киев

Re: Индусский и китайский код с примерами :)

Сообщение Doc » 01 дек 2008, 09:16

а это только что мне удалёнщик прислал ((((:
Код: Выделить всё
$cols=5;
$masFileType[1]=".jpg";
$masFileType[2]=".jpeg";
$masFileType[3]=".gif";
$masFileType[4]=".bmp";
$masFileType[5]=".tif";

for($i=1;$i<$cols+1;$i++)
{
if(substr_count("$dir$file",$masFileType[$i])>0){$ReturnString=$ReturnString."|$dir$file";}
}
программист-тунеядец
Изображение
Изображение
Изображение
Аватара пользователя
Doc
Интернет-Параноик
 
Сообщения: 4087
Зарегистрирован: 08 ноя 2004, 09:43
Откуда: Днепропетровск

Re: Индусский и китайский код с примерами :)

Сообщение Maxx » 01 дек 2008, 11:27

Doc писал(а):а это только что мне удалёнщик прислал ((((:
Код: Выделить всё
$cols=5;
$masFileType[1]=".jpg";
$masFileType[2]=".jpeg";
$masFileType[3]=".gif";
$masFileType[4]=".bmp";
$masFileType[5]=".tif";

for($i=1;$i<$cols+1;$i++)
{
if(substr_count("$dir$file",$masFileType[$i])>0){$ReturnString=$ReturnString."|$dir$file";}
}

Ну, дык работает же? :))
Даже "ya_kartinko.gif.exe" прохавает :)
Аватара пользователя
Maxx
Старейшина
 
Сообщения: 713
Зарегистрирован: 09 ноя 2004, 20:48
Откуда: Киев

Re: Индусский и китайский код с примерами :)

Сообщение Shmagi&МасЬкА » 04 дек 2008, 19:55

сор за флуд, но у мя мосхи ломаютсо... нечё непонятно ))
Shmagi&МасЬкА
Как бЭэ...ПыЩ-ПыЩ
 
Сообщения: 539
Зарегистрирован: 07 май 2008, 08:18


Вернуться в Прочее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей