[image]

WTF-code

 
1 2 3
+
-
edit
 

Balancer

администратор
★★★★★
WTF-code программирование
Читаю тут один пример, вижу «double meterPerSec = kmPerHour * 0.2777777777777778;». Не лень же было человеку столько семёрок вбивать, вместо того, чтобы на 3.6 поделить :)

// Транслировано с juick.com
   

US Сергей-4030 #18.02.2011 22:03  @Balancer#18.02.2011 21:49
+
-
edit
 

Сергей-4030

исключающий третье
★★
Balancer> @Balancer: *программирование *WTF-code
Balancer> Читаю тут один пример, вижу «double meterPerSec = kmPerHour * 0.2777777777777778;». Не лень же было человеку столько семёрок вбивать, вместо того, чтобы на 3.6 поделить :)
Balancer> // Транслировано с http://juick.com/Balancer/1224306

Это наверняка скопипасчено с калькулятора.

ЗЫ В нашем коде, который типа должен быть профессиональный и всякое такое сегодня увидел перл:

code java
  1.      // pressed - boolean
  2.  
  3.      if(pressed==true) {
  4.            // делать всякую херню
  5.      } else if(pressed==false) {
  6.            /// делать другую херню
  7.      }
   9.0.597.949.0.597.94
RU Balancer #18.02.2011 22:08  @Сергей-4030#18.02.2011 22:03
+
-
edit
 

Balancer

администратор
★★★★★
Сергей-4030> ЗЫ В нашем коде, который типа должен быть профессиональный и всякое такое сегодня увидел перл:

Похоже на старый бейсиковский прикол:
IF cond THEN ... ELSE ... NOTTHENNOTELSE ... ENDIF


Там, правда, как-то гораздо веселее было, в виде шуточной программы и с сопутствующими текстами, но лет 20 уже прошло, не помню деталей :D
   
US Сергей-4030 #18.02.2011 22:09  @Сергей-4030#18.02.2011 22:03
+
-
edit
 

Сергей-4030

исключающий третье
★★
А еще сплошь и рядом вот примерно такая фигня, за которую бы я просто убивал без жалости:

code java
  1.  
  2. String names[] = {
  3.    "Попа 1",
  4.    "Попа 2",
  5.    "Попа 3"
  6. };
  7.  
  8. int codes[] = {
  9.    12, 3, 167
  10. };
  11.  
  12. int getSelectedCode() {
  13.    for(int i=0;i<names.length;i++ {
  14.       if(names[i].equals(comboBox.getSelectedItem().toString()) {
  15.           return codes[i];
  16.       }
  17.    }
  18.    return -1;
  19. }
   9.0.597.949.0.597.94
?? HolyBoy #19.02.2011 09:42  @Сергей-4030#18.02.2011 22:09
+
-
edit
 

HolyBoy

аксакал

Если, взять языки, в которых реализованы хэши, например, Руби, то данный вами фрагмент может выглядеть очень просто. А что у Явы имеется в плане работы с хэшами, массивами и как тогда правильно надо было писать?
   
+
-
edit
 

Balancer

администратор
★★★★★
HolyBoy> А что у Явы имеется в плане работы с хэшами

Есть там несколько достаточно эффективных хэшмапов, как и в любом приличном языке :) В Си++, кстати, тоже их немало. Правда, в отличии от Java, в библиотеках.
   
US Сергей-4030 #19.02.2011 10:56  @HolyBoy#19.02.2011 09:42
+
-
edit
 

Сергей-4030

исключающий третье
★★
HolyBoy> Если, взять языки, в которых реализованы хэши, например, Руби, то данный вами фрагмент может выглядеть очень просто. А что у Явы имеется в плане работы с хэшами, массивами и как тогда правильно надо было писать?

Дело в данном случае не в хэше. Писать надо примерно так (если не нужна отдельная Model):

code java
  1.  
  2. MyComboBoxValue values [] = {
  3.   new MyComboBoxValue("Попа 1", 12),
  4.   new MyComboBoxValue("Попа 2", 3),
  5.   new MyComboBoxValue("Попа 3", 167)
  6. };
  7.  
  8. int getSelectedCode() {
  9.       return ((MyComboBoxValue)comboBox.getSelectedItem()).getCode();
  10. }


values передаются комбобоксу как массив значений. MyComboBoxValue - обертка для имени и кода, у нее toString() возвращает что-то вроде getName(). Смысл тут в том, что JComboBox, JList etc могут хранить в массиве значений вовсе не только String.
   9.0.597.989.0.597.98
?? HolyBoy #19.02.2011 10:58  @Сергей-4030#19.02.2011 10:56
+
-
edit
 

HolyBoy

аксакал

Сергей-4030> Смысл тут в том…

Понятно, спасибо.
   
+
-
edit
 

EE Татарин #01.03.2011 23:50  @Balancer#01.03.2011 22:23
+
-
edit
 

Татарин

координатор
★★★★★

По колено в коде — Говнокод.ру

Сборник говнокода на различных языках программирования

// govnokod.ru
 
   9.0.597.989.0.597.98
RU Balancer #01.03.2011 23:56  @Татарин#01.03.2011 23:50
+
-
edit
 

Balancer

администратор
★★★★★
Татарин> По колено в коде — Говнокод.ру

1. Он давно уже не торт :)
2. То - чужое, а это - своё... В смысле, в этом я сегодня разбирался ;)
   
EE Татарин #02.03.2011 00:52  @Balancer#01.03.2011 23:56
+
-
edit
 

Татарин

координатор
★★★★★
Татарин>> По колено в коде — Говнокод.ру
Balancer> 1. Он давно уже не торт :)
Ну, почему же? :)
Запостил ссылку, сам стал смотреть... на первой же странице великолепное
code text
  1. #define private public
  2. #include <vector>
  3. #include <iostream>
  4.  
  5. int main()
  6. {
  7.    // . . .
  8. }

Остроумно, наф.

Balancer> 2. То - чужое, а это - своё... В смысле, в этом я сегодня разбирался ;)
А, ну ОК.
   9.0.597.989.0.597.98
US Mishka #02.03.2011 01:07  @Сергей-4030#18.02.2011 22:03
+
-
edit
 

Mishka

модератор
★★★
Сергей-4030> ЗЫ В нашем коде, который типа должен быть профессиональный и всякое такое сегодня увидел перл:
А я вижу такое
code c++
  1.            // pressed - boolean
  2.        
  3.            if(pressed==true) {
  4.                  return true;
  5.            } else if(pressed==false) {
  6.                  return false;
  7.            }


или такое:
code c++
  1.        
  2.            if(a<5) {
  3.                  return true;
  4.            } else {
  5.                  return false;
  6.            }
   3.6.133.6.13

Nikita

аксакал

Mishka> А я вижу такое

А вот меня такие вещи совершенно не напрягают. Автоматическая кодогенерация, три итерации рефакторинга - дежурных способов получения предложенных примеров хватает.

Более того, явное обозначение условия и для else-блока - вполне разумная идея во многих случаях. А уж проверки boolean как "false == " и "true == " лично я всегда именно так и пишу.
   11.0.686.011.0.686.0

Mishka

модератор
★★★
Nikita> А вот меня такие вещи совершенно не напрягают. Автоматическая кодогенерация, три итерации рефакторинга - дежурных способов получения предложенных примеров хватает.

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

Nikita> Более того, явное обозначение условия и для else-блока - вполне разумная идея во многих случаях. А уж проверки boolean как "false == " и "true == " лично я всегда именно так и пишу.

Да не явное действие. А просто вычисление логического предиката и возврат такого значения делается через if. Это сродни вычислениею арифметического выражения в if-е и возврат значения в зависимости от результата:
code c++
  1.  
  2. if ( 2*x+3 == 0 )
  3.   return 0;
  4. else if ( 2*x+3 == 1 )
  5.   return 1;
  6. elif ( 2*x+3 == 2 )
  7.   return 2;
  8.  
  9. ...
   3.6.153.6.15
+
-
edit
 

Balancer

администратор
★★★★★
Жесть какая :D Нахождение медианы:
code php
  1. if ($oe_value % 2 == 0 )
  2.     {
  3.     $position = 1;
  4.     }
  5.     else
  6.     {
  7.     $position = 2;
  8.     }
  9. if ($position == 2 )
  10.     {
  11.     $median = $test_data[(count($test_data)/2)];
  12.     }
  13.     else
  14.     {
  15.     $median= (($test_data[(count($test_data)/2)-1]) +
  16.                                   ($test_data[(count($test_data)/2)]))/2;
  17.     }
   

AXT

инженер вольнодумец
★☆
☠☠
Balancer> Жесть какая :D Нахождение медианы:

Насколько я понял код (увы, не спец в PHP), то для отсортированного массива оно таки вернёт что-то похожее на медиану, не? Если oe_value содержит длину массива (структура кода, конечно, бредовая).

У меня самая суровый случай WTF-кода был такой:

Есть самопальная утилитка для внутреннего использования, результатом работы которой является огромная простыня, выводимая на stdout. Ну, на самом деле, перенаправляемая в файл или куда ещё надо. В один прекрасный день, один из разработчиков утилитки добавляет в неё функционал, требующий использования библиотеки, разработанной в рамках другого проекта. В другой прекрасный день, в утилитке обнаруживается математический косяк, и я пытаюсь понять, где именно, пересобрав её в отладочном режиме.

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

Изрядно охренев, в качестве последнего средства включаю в отладчике показ дизассемблера вместо исходников, и некоторое время с глубоким удивлением смотрю в код. Когда дошло, проблему нашёл почти сразу.

&nbsp[показать]
   3.6.163.6.16
+
-
edit
 

Balancer

администратор
★★★★★
AXT> для отсортированного массива оно таки вернёт что-то похожее на медиану, не?

Медиану и вернёт. Но как :)
   
+
-
edit
 

Balancer

администратор
★★★★★
PHP WTF-Code
В разбираемом сегодня коде образчик:
[code php]
if ($tex!=2)
$newurl = "http://site/_newses_/g.php?news=$id";
else
$newurl = "http://site/_newses_/g.php?news=$id";
[/code]

// Транслировано с juick.com
   
+
-
edit
 

HolyBoy

аксакал

Balancer> В разбираемом сегодня коде образчик:

Может, ошибка? Или отладочный вариант остался?
   
+
-
edit
 

Balancer

администратор
★★★★★
HolyBoy> Может, ошибка? Или отладочный вариант остался?

Скорее всего, когда-то это были разные ссылки. Потом унифицировали. Код не рефакторили, а просто поменяли формат ссылки. Не ошибка, так как встречается в трёх местах :)
   
+
+1
-
edit
 
+
-
edit
 
Несколько примеров из личного опыта.
Суть кода сохранёна, но все "имена и фамилии" изменены.

code cpp
  1. #define N = 5;


code cpp
  1. typedef std::vector<Object*> ObjectsArray;
  2. ObjectsArray objectsArray;
  3. for(ObjectsArray::const_iterator itOA1 = objectsArray.begin();
  4.     itOA1 != objectsArray.end();
  5.     itOA1++)
  6. {
  7.     for(ObjectsArray::const_iterator itOA2 = ++ObjectsArray::const_iterator(itOA1);
  8.         itOA2 != objectsArray.end();
  9.         itOA2++)
  10.     {
  11.         doSomething(*itOA1, *itOA2);
  12.     }
  13. }


code cpp
  1. inline float getSign(float value)
  2. {
  3.     return value / fabs(value);
  4. }


code cpp
  1. inline int getNearestInt(float value)
  2. {
  3.     int intval = (int)value;
  4.     if(fabs(value - (float)(intval)) > 0.5f)
  5.     {
  6.         if(intval > 0)
  7.             return intval + 1;
  8.         else
  9.             return intval - 1;
  10.     }
  11.     else
  12.         return intval;
  13. }


code cpp
  1. Vec3 * intersectionPoint = terrain.getIntersectionPoint(from, direction);
  2. if(intersectionPoint)
  3. {
  4.     //intersection - do something
  5.     delete intersectionPoint;
  6. }
  7. else
  8. {
  9.     //no intersection
  10. }
   
+
-
edit
 
Ситуация

code cpp
  1. //Дано
  2. class Object
  3. {
  4. public:
  5.     void func(int param);
  6. };
  7. std::vector<Object*> objects;
  8. objects.push_back(new Object());
  9. objects.push_back(new Object());
  10. ...
  11. objects.push_back(new Object());
  12. //Надо: вызвать для всех в objects Object::func(2);


Решения

code cpp
  1. //Old school
  2. for(std::vector<Object*>::iterator itO = objects.begin();
  3.     itO != objects.begin();
  4.     itO++)
  5. {
  6.     (*itO)->func(2);
  7. }


code cpp
  1. std::for_each(objects.begin(), objects.end(), std::bind2nd(std::mem_fun1(&Object::func), 2));
  2. //WTF?!
  3. //Но так уже модно - в стиле ФП
   
+
-
edit
 

digger

аксакал

Эти итераторы гадкие тем,что не дебагируются пошагово,как традиционные циклы while, тем более последнее выражение.
   3.6.83.6.8
1 2 3

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru