1. 7 мес. назад

    Почему оператор goto считается быдлокодингом?

    Ответы: (2) (26) (93)
  2. ‹ Ранее
  3. 7 нед. назад

    любой сжатый exe-файл - говнокод? ведь

    Курильщик непонятно как он работает, либо так его просмотр неприятен

  4. (197) ничего не делающий код при запуске просто неспособен куда-либо свалиться

    Ответы: (203)
  5. andrewks обфускация

    Некоторый так изначально пишут. )

    Но по определению это не говнокод, это если серьезно.

    Ответы: (204)
  6. andrewks (197) ничего не делающий код при запуске просто неспособен куда-либо свалиться

    Ок. Код который даже на 1 процент не делающий то чего от него ожидается.

  7. Курильщик Но по определению это не говнокод

    Курильщик я дал свое определение говнокоду.

    Курильщик говнокод - работающий код но написанный так что непонятно как он работает, либо так его просмотр неприятен.

    Ответы: (207)
  8. Если конечно не ожидалось что первая же инструкция привет к вылету.

  9. 03.02.2020 20:48:28 отредактировано webdev

    Неработающий код тоже может быть говнокодом. Одно другому не мешает.
    Если написать работающий говнокод, а потом добавить в него синтаксическую ошибку, от этого он не перестанет быть говнокодом.

    Ответы: (209) (211)
  10. (204) и?
    Говнокод пишут по неопытности а обфускация умышленное действие. Если я говоря про говнокод упустил это слово то это подразумевать можно. Но я предлагаю не доводить до маразма.

  11. Теоретики, блдЪ

    Ответы: (210) (215)
  12. webdev Неработающий код тоже может быть говнокодом

    Пусть неработающий говнокод хотя бы доберется до кода работающего, но говняного.

  13. (208) ты поправил?

    Ответы: (215)
  14. (206) не путай неправильно работающий код с кодом, содержащим синтаксические ошибки (мы сейчас про исходный код говорим, конечно)
    второй просто не пойдёт на выполнение, вот это и есть чистый неработающий исходный код.
    любой другой, который скомпилируется и пойдёт на выполнение, будет работающим, но тут возможны варианты - правильно работающим, либо неправильно работающим (ещё называют нерабочим)

    Ответы: (213) (214)
  15. Я же жду. Чтобы показать как бы я его переделал в нормальночитаемый

  16. (211) Я и не путаю. К чему ты это мне написал? Мы про говнокод говорим, а не про неработающий код.

  17. andrewks содержащим синтаксические ошибки

    Я не говорю про не компилирующийся код.
    Я говорю про код который скомпилирован но на первой же инструкции вылетающий.

    Ответы: (218)
  18. Курильщик (208) ты поправил?

    1. Я не дождался от тебя "правильного" варианта моего "говнокода"
    2. Я понял, что ты [...] не понял, что делает этот код

    Ты и на собеседованиях также в ответ на конкретный вопрос отвечаешь кучей заумных слов?
    И как? Берут на работу?

    Ответы: (217) (219) (220)
  19. Говнокод может давать как правильный результат, так и не правильный.
    Он отличается от хорошего кода тем, что достигает того же результата другим путем или алгоритмом, который считается говняным.

    Ответы: (224)
  20. (215) чувак, я тебя попросил исправить вылет в первой строке. Сделай хотя бы определение массива. Остальное я сам.

    Ответы: (220)
  21. Курильщик Я не говорю про не компилирующийся код.
    Я говорю про код который скомпилирован но на первой же инструкции вылетающий.

    Без разницы. Сделай не синтаксическую, а любую другую ошибку. Перестанет он быть говнокодом от этого?

  22. Эльниньо 2. Я понял, что ты [...] не понял, что делает этот код

    Этот код ничего не делает т.к. вылетит в сегфолб на первой же инструкции.

  23. Курильщик (215) чувак, я тебя попросил исправить вылет в первой строке. Сделай хотя бы определение массива. Остальное я сам.

    Его там нет. Переменной d1 присвоено значение до этого куска кода

    Ответы: (222)
  24. Друзья, сделайте лучше мою задачу про которую я писал выше. Вы напишите в вашем говностиле с циклами и условиями, а я в своем нормальном уже почти доделал. Потом сравним.
    Там ничего сложного. Просто скопировать со стековерфлоу, и переделать с линейного списка на ветвящийся.

  25. 03.02.2020 21:02:57 отредактировано Курильщик

    Эльниньо Его там нет.

    а это кто по твоему "m1[i1];" ?

    Ответы: (225)
  26. при обращении к m1 у тебя будет вылет, понимаешь о чем я?

  27. webdev Говнокод может давать как правильный результат, так и не правильный.

    я же выше писал что если он хоть что то выдает то это уже что то, прога которая вылетает на первой инструкции это уже не прога.

    Ответы: (234)
  28. Курильщик а это кто по твоему "m1[i1];" ?

    Цикл проходит по массиву m1 от 1 до d1 (размерность массива)

    Так какую задачу решает этот код?

    Ответы: (226)
  29. 03.02.2020 21:23:53 отредактировано Курильщик

    Эльниньо Так какую задачу решает этот код?

    мне вообще без разницы мы же обсуждаем не задачу а то как написано, верно?

    Ответы: (227)
  30. Курильщик мне вообще без разницы мы же обсуждаем не задачу а то как написано, верно?

    Не зная ТЗ можно судить правильный код или неправильный?!

    Ответы: (228)
  31. (227) я не обсуждал правильный код или нет, мне всё равно что он должен делать. я указал на очевидные проблемы с вылетом и сказал что перепишу его так как я бы написал тот же код и делающий тоже самое.

    Ответы: (229)
  32. Курильщик очевидные проблемы с вылетом

    Ещё раз - нет там вылета

    Ответы: (230)
  33. Эльниньо Ещё раз - нет там вылета

    я же тебе показал где вылет, по умолчанию массив m1 нулевой длины, он был нулевой длины до тех пор пока я из тебя клещами не вытащил что он имеет длину d1

    Ответы: (232)
  34. теперь вылетает вот тут m2[i1,i2];

  35. ты понимаешь что в m1[i1] может быть число больше чем длина m2 ?

    Ответы: (235)
  36. Курильщик я же выше писал что если он хоть что то выдает то это уже что то, прога которая вылетает на первой инструкции это уже не прога.

    Да. Но ты утверждаешь что говнокод не может давать сбоев, и прога с говнокодом должна работать идеально правильно?

  37. 03.02.2020 21:57:33 отредактировано Эльниньо

    Курильщик ты понимаешь что в m1[i1] может быть число больше чем длина m2 ?

    Не может. Я об этом позаботился в процессе заполнения массивов.
    Ты опять ничего не понял.
    Четырёхмерный массив для хранения неких данных.
    Для чего в коде одномерный, двумерный и трёхмерный массивы?
    Не поняв, начинаешь судить и садишься в лужу.
    У тебя и в реале такой же подход к программированию?

    Ответы: (236) (237) (262)
  38. Эльниньо Не может. Я об этом позаботился в процессе заполнения массивов.

    ни черта ты не позаботился.

    Ответы: (238)
  39. 03.02.2020 22:03:54 отредактировано Курильщик

    Эльниньо Для чего в коде одномерный, двумерный и трёхмерный массивы?
    Не поняв, начинаешь судить и садишься в лужу.
    У тебя и в реале такой же подход к программированию?

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

  40. 03.02.2020 22:02:46 отредактировано Эльниньо

    Курильщик ни черта ты не позаботился.

    Ты судишь о целом по малюсенькой его части.
    Почему я не удивлён

    Ответы: (242)
  41. Курильщик, ты чего придрался к бедному Эльниньо. Его код вполне может оказаться рабочим при некоторых значениях входных данных. Мы же не про правильность работы кода говорим, а про стиль его написания. И тут у него действительно говнокод. Причем он зачем-то скрывает суть этой программы, наверное боится что обосрем еще больше когда узнаем что же она должна делать.

    Ответы: (240) (244) (258)
  42. webdev Причем он зачем-то скрывает суть этой программы

    Я ничего не скрываю, я жду когда вы поймёте.
    Там всё прозрачно даже для начинающего программиста.

    Ответы: (243)
  43. Вообщем с вами всё понятно, "программисты"

  44. Эльниньо Ты судишь о целом по малюсенькой его части.

    мне этого куска кода достаточно, ты показал крайне небезопасный код, так писать нельзя, я понимаю что до тебя не достучаться. Есть основное правило, никаким данным доверять нельзя. Ты им пренебрег.

  45. Эльниньо Я ничего не скрываю, я жду когда вы поймёте.
    Там всё прозрачно даже для начинающего программиста.

    Ну это же тупой троллинг. Я тоже могу вырвать кусок кода из программы, выложить сюда, и ты не поймешь что он делает, а я буду говорить что там же все понятно даже школьнику. Это глупо. Ты намеренно создаешь сложности, чтобы перевести разговор что твой код говно на тему что мы просто его не поняли.
    Твое утверждение что если код не понятен, значит он не говно - ложное, ни на чем не основанное. Если мы поймем его смысл, лучше он от этого не станет, это факт.

    Ответы: (245) (247)
  46. (239)

    webdev Курильщик, ты чего придрался к бедному Эльниньо. Его код вполне может оказаться рабочим при некоторых значениях входных данных.

    ага он будет рабочим если d1 = 1 а значения во всех ячейках m1..m3 будут = 1, и в массиве m4 везде Yes

    Ответы: (258)
  47. (243) а чего непонятного то в его коде?

    Ответы: (247)
  48. просто такой код мой кодревью не пройдет, эльниньо его будет переписывать пока он не перестанет вылетать.

  49. Курильщик (243) а чего непонятного то в его коде?

    Что в массивах? Что в переменных? Кто вообще так называет переменные? d1 - дичь какая-то. За такое сразу нужно по пальцам линейкой лупить.

    Ответы: (248) (250) (258)
  50. webdev Что в массивах? Что в переменных?

    это не имеет значения, код должен работать при любых входных данных.

  51. Для меня - это просто поиск какого-то "yes" перебором по массиву, с непонятными граничными условиями.
    Почему не перебирается весь массив - из кода не понятно. По какому принципу заполняются первые массивы? Хрен его знает. Поэтому ТЗ придумать по этому куску кода сложно. А автор не пишет, и причину почему не пишет тоже не озвучивает.

    Ответы: (252)
  52. webdev d1 - дичь какая-то

    а мне нравятся короткие имена если область действия крайне ограничена.

    я, например, часто пишу так:

    var c = _context.Corridors.Where(p => p.Num <100);
    return View(c.ToList());

    Ответы: (253)
  53. зачем мне заводить длинное имя переменной если ей жить всего ничего и по контексту понятно что там.

  54. webdev Для меня - это просто поиск какого-то "yes" перебором по массиву, с непонятными граничными условиями.

    всё так, и без проверки на вылет за пределы массива.

  55. Курильщик а мне нравятся короткие имена если область действия крайне ограничена.

    я, например, часто пишу так:

    var c = _context.Corridors.Where(p => p.Num <100);
    return View(c.ToList());

    ну и зачем ты тут вообще объявил переменную? Либо не используй ее вообще, если она больше нигде не нужна, либо задай ей понятное имя, чтобы от нее хоть какая-то польза была.

    Ответы: (254) (255)
  56. (253) потому что там бывает вот так
    int client_id = cid ?? 0;
    ...
    ...

    var c = _context.Corridors.Where(p => p.Num <100);
    if (...) {
    c = c.Where(p => p.Client == client_id);
    }

    return View(c.ToList());

  57. (253) я же говорю если контекст понятен а скоуп маленький я пишу короткое имя.

  58. Значит логика не четкая, раз пришлось так сделать. Но все равно я бы ее лучше назвал нормально

  59. Эльниньо Так переделай (138) как надо

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

  60. Курильщик (239)
    ага он будет рабочим если d1 = 1 а значения во всех ячейках m1..m3 будут = 1, и в массиве m4 везде Yes

    он будет рабочим если d1 (размерность m1) будет любым, а в ячейках m1..m3 будут размерности вложенных массивов

    webdev Что в массивах? Что в переменных? Кто вообще так называет переменные? d1 - дичь какая-то. За такое сразу нужно по пальцам линейкой лупить.

    Тебе было бы легче, если бы я назвал dimension1?

    Ответы: (259) (260) (261)
  61. (258) еще раз, ты не проверяешь входные данные, это скверная привычка. И это недопустимо.

  62. Эльниньо он будет рабочим если d1 (размерность m1) будет любым, а в ячейках m1..m3 будут размерности вложенных массивов

    Если так оно и есть, то это рукалицо.
    Делать цикл по значениям из каких-то массивов, вместо того, чтобы делать цикл по размерности нужного массива? Это нормально по твоему?
    Если нужно будет добавить значения в основной массив, ты будешь так же изменять значения в других массивах, чтобы ничего не поломалось? Это же дичь!

  63. Эльниньо Тебе было бы легче, если бы я назвал dimension1?

    Ну конечно. Так хотя бы понятно что это размерность чего-то, и можно предположить что именно первого массива. Хотя все равно дичь.

  64. Эльниньо Четырёхмерный массив для хранения неких данных.

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

  65. 03.02.2020 22:55:03 отредактировано sda553

    Блдь, да что там за код то такой от элли? продублируйте что ль

  66. (138)

  67. 138 удалено сообщение

    Ответы: (269)
  68. Стыдно стало, вот и удалил ))))
    Там дичь. Можешь поверить на слово.

  69. Ок

  70. там это

    for (i1 = 1; i1 <= d1; i1++)
    {
    for (i2 = 1; i2 <= m1[i1]; i2++)
    {
    for (i3 = 1; i3 <= m2[i1,i2]; i3++)
    {
    for (i4 = 1; i4 <= m3[i1,i2,i3]; i4++)
    {
    if m4[i1,i2,i3,i4] == Yes
    {
    goto Finish;
    }
    }

    }

    }
    }
    Finish:
    cout << "Координаты " << Yes << " = " << i1,i2,i3,i4;

    Ответы: (272) (281) (518)
  71. sda553 138 удалено сообщение

    Врёшь, собака

    Ответы: (270)
  72. (269) не врет. есть вариант не просто блокирования но и удаления сообщений.

  73. ТЗ:
    Есть d1 объектов (кол-во может измениться).
    В каждом есть x подобъектов (кол-во может измениться).
    Каждый подобъект разбит на y структурных единиц (кол-во может измениться)
    Надо хранить по каждой единице z показателей (кол-во может измениться).

    Под руками:
    Роботрон-1715, 16 Кб ОЗУ и два флоппа по 180 Кб
    Basic.
    Всё.
    Это была моя первая программа. Я умудрился не только впихнуть это всё, но организовать оверлеи (Иначе тупо памяти не хватало).
    Тут написал кусок на С, чтобы понятнее было.

  74. 04.02.2020 02:25:31 отредактировано sda553

    (268) траверзинг какой то, с О(n^4) брутфорсный на первый взгляд. Ну здесь goto как то не вписывается. Break обычно надо

    Ответы: (274) (277)
  75. 04.02.2020 02:40:32 отредактировано sda553

    Я подозреваю, что автор
    1. то ли хотел сэкономить память, полагая, что если в четырехмерном массиве где то проинициализированы не все элементы, а только какая то часть. Но тут явно это не удалось. m4 займет максимальный размер.
    2. Либо автор хотел ускорить траверзинг, перебирая на поиске Yes не все элементы, а только какую то их часть. Но тут опять сомнительная экономия. По сути прямой цикл
    for(int* p = m4; p<&m4[max][max][max][max] && *p!=Yes;p++)
    Отработал бы гораздо быстрее

    Ответы: (280) (293)
  76. (272) брик выйдет из одного цикла

    Ответы: (275) (276) (277)
  77. (274) а ну да. Тогда return, предварительно обернув эти циклы в метод.

  78. andrewks брик

    Брейк. Бокс не смотрел что-ли?

    Ответы: (278)
  79. andrewks (272) брик выйдет из одного цикла

    Смотря в каком языке программирования.

    Ответы: (279) (290)
  80. webdev Брейк

    да. ох, уж эти упоротые англы

    Ответы: (289)
  81. 04.02.2020 07:53:23 отредактировано sda553

    (277) хм. А в каком языке забрейкаются все вложенные циклы?

    Ответы: (290)
  82. sda553 Я подозреваю, что автор
    1. то ли хотел сэкономить память, полагая, что если в четырехмерном массиве где то проинициализированы не все элементы, а только какая то часть. Но тут явно это не удалось. m4 займет максимальный размер.

    Тепло

  83. 04.02.2020 15:26:47 отредактировано ТеньД

    Курильщик for (i1 = 1; i1 <= d1; i1++)
    {
    for (i2 = 1; i2 <= m1[i1]; i2++)
    {
    for (i3 = 1; i3 <= m2[i1,i2]; i3++)
    {
    for (i4 = 1; i4 <= m3[i1,i2,i3]; i4++)
    {
    if m4[i1,i2,i3,i4] == Yes
    {
    goto Finish;
    }
    }

    }

    }
    }
    Finish:
    cout << "Координаты " << Yes << " = " << i1,i2,i3,i4;

    Если не докапываться с проверками, инициализацией, оптимизацией и прочая, то я бы сделал так:
    for (i2 = 1; i2 <= m1[i1]; i2++)
    {
    for (i3 = 1; i3 <= m2[i1,i2]; i3++)
    {
    for (i4 = 1; i4 <= m3[i1,i2,i3]; i4++)
    {
    if m4[i1,i2,i3,i4] == Yes
    {
    cout << "Координаты " << Yes << " = " << i1,i2,i3,i4;
    return true;
    }
    }

    }

    }
    }
    return false;

  84. Но в любом случае этот код выглядит ужасно. Возможно он должен быть отрефакторин с учётом вызова функции.

    Ответы: (283) (286)
  85. (282) Безусловно код выглядит ужасно. За такое именование переменных хочется ругаться матом. Любой код, выполняющий отдельную задачу, в данном случае поиск чего-то там, имеет смысл вынести в отдельную функцию с говорящим именем.

    Ответы: (284) (286)
  86. ТеньД в данном случае поиск чего-то там, имеет смысл вынести в отдельную функцию с говорящим именем.

    findYes()
    :)

  87. [smile=>:(]

  88. Курильщик этот код выглядит ужасно

    ТеньД Безусловно код выглядит ужасно.

    эстеты, блтъ

    Ответы: (288) (346)
  89. (138) элли, не тот ли это г-нокод, который

    Эльниньо мой алгоритм, попавший в учебники и ставший стандартом де-факто

    ?

  90. (286) не в эстетстве дело.

  91. andrewks да. ох, уж эти упоротые англы

    Как бы именно русские говорят брейк. А брик говорят как раз те, кто думает что знает енглиш лучше других. Если бы это не означало кирпич, было бы еще приемлемо. Небольшие ошибки допустимы до тех пор пока они не искажают смысл.

  92. sda553 (277) хм. А в каком языке забрейкаются все вложенные циклы?

    Так как я веб дев, то скажу только за веб языки: Во всех.
    На похапе : break N; где N - номер уровня вложенности
    На JS: break loopN; где loopN - это имя одного из циклов, заранее назначенное через метку.
    На Java так же можно.
    На С++ можно поднять флаг во вложенном цикле, который будет проверяться во внешних и там тоже брейкаться.

    Ответы: (291)
  93. webdev На С++ можно поднять флаг во вложенном цикле, который будет проверяться во внешних и там тоже брейкаться.

    вот это вот ни разу не

    webdev А в каком языке забрейкаются все вложенные циклы?

    кстати, break по сути своей, goto

    Ответы: (292)
  94. andrewks вот это вот ни разу не

    Конечно. Но тем не менее об этом никто почему-то не догадался.

    andrewks кстати, break по сути своей, goto

    Именно. Или ретурн, если рассматривать цикл как процедуру.

    Ответы: (301)
  95. sda553 for(int* p = m4; p<&m4[max][max][max][max] && *p!=Yes;p++)

    Вот это годное решение, для си. Быстрое и четкое. На жаваскрипте можно было бы так сделать:

    const reducer = (ret, val, i) =>
        Array.isArray(val) ? checkArray(ret, val, i) : checkValue(ret, val, i);
    
    const checkArray = (ret, val, i) => {
        const x = val.reduce(reducer, []);
        return x.length ? [...ret, i, ...x] : ret;
    };
    
    const checkValue = (ret, val, i) => val === 'yes' ? [...ret, i] : ret;

    Разбил на функции чтобы было проще отлаживать и читать.
    Бесплатный бонус - размерность массива нигде жестко не задается, работает хоть для десятимерного. Возвращает массив найденных индексов. Использование:

    products.reduce(reducer, []);
    Ответы: (294) (298)
  96. webdev return x.length ? [...ret, i, ...x] : ret;

    Ужасная практика.

    Ответы: (295)
  97. Курильщик Ужасная практика.

    Сказал любитель for

    Ответы: (296)
  98. (295) ну скажи, какой код отладить без рефакторинга проще

    ....
    if (expr) {
    return res1
    }
    return any2;
    }

    Или
    return expr ? res1 : any2;

    При этом на уровне бинарного кода будет одно и тоже.

    Ответы: (303)
  99. В твоем коде используются ифы там где они без надобности, и в нем два ретурна. Он не пройдет код-ревью, а значит и отлаживать его не придется, так как это говнокод. Исправь эти две ошибки, тогда сравним какой проще отлаживать.

    Ответы: (298) (328)
  100. (297) в твоём коде в (293) те же if-ы только записанные в одну строку.

  101. Ага. И один ретурн в самом конце. Круто же. Легко читать и отлаживать. А у тебя все наоборот.

    Ответы: (300) (302)
  102. Новее ›

или зарегистрируйтесь чтобы ответить!