1. C++ / Говнокод #26485

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    // https://shitcode.net/557
    
    int getChar(char charachter){
     int returnValue = Z;
     switch(charachter){
      case 'A': returnValue = A; break;
      case 'a': returnValue = A; break;
      case 'B': returnValue = B; break;
      case 'b': returnValue = B; break;
      case 'C': returnValue = C; break;
      case 'c': returnValue = C; break;
      case 'D': returnValue = D; break;
      case 'd': returnValue = D; break;
      case 'E': returnValue = E; break;
      case 'e': returnValue = E; break;
      case 'F': returnValue = F; break;
      case 'f': returnValue = F; break;
      case 'G': returnValue = G; break;
      case 'g': returnValue = G; break;
      case 'H': returnValue = H; break;
      case 'h': returnValue = H; break;
      case 'I': returnValue = I; break;
      case 'i': returnValue = I; break;
      case 'J': returnValue = J; break;
      case 'j': returnValue = J; break;
      case 'K': returnValue = K; break;
      case 'k': returnValue = K; break;
      case 'L': returnValue = L; break;
      case 'l': returnValue = L; break;
      case 'M': returnValue = M; break;
      case 'm': returnValue = M; break;
      case 'N': returnValue = N; break;
      case 'n': returnValue = N; break;
      case 'O': returnValue = O; break;
      case 'o': returnValue = O; break;
      case 'P': returnValue = P; break;
      case 'p': returnValue = P; break;
      case 'Q': returnValue = Q; break;
      case 'q': returnValue = Q; break;
      case 'R': returnValue = R; break;
      case 'r': returnValue = R; break;
      case 'S': returnValue = S; break;
      case 's': returnValue = S; break;
      case 'T': returnValue = T; break;
      case 't': returnValue = T; break;
      case 'U': returnValue = U; break;
      case 'u': returnValue = U; break;
      case 'V': returnValue = V; break;
      case 'v': returnValue = V; break;
      case 'W': returnValue = W; break;
      case 'w': returnValue = W; break;
      case 'X': returnValue = X; break;
      case 'x': returnValue = X; break;
      case 'Y': returnValue = Y; break;
      case 'y': returnValue = Y; break;
      case 'Z': returnValue = Z; break;
      case 'z': returnValue = Z; break;
      case ' ': returnValue = _; break;
      case '3': returnValue = B2; break;
      case '<': returnValue = TEMP; break;
      case '*': returnValue = FULL; break;
      case '|': returnValue = LINE; break;  
      case '_': returnValue = _; break;  
      case ':': returnValue = COL; break;  
      case '-': returnValue = DASH; break;  
      case ')': returnValue = BRA2; break;  
      case '%': returnValue = SMILE; break;  
      case '.': returnValue = DOT; break;    
      case '^': returnValue = COLDOT; break;      
      }
      return returnValue; //RETORNO DE INFORMAÇÃO
    }

    Тут IsBukva до getChar допромоутили

    Запостил: Fike, 10 Марта 2020

    Комментарии (48) RSS

    • Какой "С++"
      Ответить
    • Они ещё все однобуквенные идентификаторы заняли под константы. Как теперь олимпиадный код писа́ть?
      Ответить
      • А греческими буквами можно именовать константы?
        Ответить
        • Да хоть эмоджами с говном и неразрывными пробелами, к сожалению...
          Ответить
          • Это хлеб!
            Ответить
            • А Вы знали, что говнокодер делает хлеб, чтобы заработать на хлеб?
              Ответить
    • >> RETORNO DE INFORMAÇÃO
      retorno de informaçinho
      Ответить
    • Ещё и из секты одновозвратников. Кстати, у одноразвратников есть какие-то преимущества, кроме возможности вставки питушни перед return для ручной аспектушни и логирования?
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • В теории, в сишке это помогает не забыть убрать за собой говно и избежать ситуаций, когда return вставил, а освободить память забыл. В языках с RAII/GC это скорее сугубо методологическая/философская питушня.
        Ответить
        • Вроде в сишке для этого делают goto free_pituxes;, который становится синонимом return. Интересно, или поехавшим легче делать вложенные if, чтобы во всех случаях без return и goto?!

          Но во всех функциях, которые не пожирают временные ресурсы, эта питушня создаёт синтаксиальную переголову.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Да, так.

              Зато код выглядит как расстановка гардов и потом исполнение алгоритма на чистых данных.
              1. Размер плохой? Садись на флешку!
              2. Память не выделилась? Садись на флешку!
              3. Кобенанта неворцеательная? Садись на флешку!
              4. Вроде всё хорошо, исполняем код.

              P.S. Ну и если багор случился где-то внутри двойного цикла, проще через return или goto отправиться на флешку, чем хитрожопить логику плавного выхода.
              Ответить
            • Да нормально. Когда нужно открыть штук пять ресурсов, а потом их в правильном порядке закрыть, при этом каждое открытие может наебаться — ничего лучше без эмуляции «RAII» просто не придумаешь (именно поэтому я за «RAII»).
              Да и выглядит оно не так уж и плохо, если сишку более-менее знать.

              FILE *f1 = NULL, *f2 = NULL;
              void *mem = NULL;
              
              f1 = fopen("huj1", ...);
              if (!f1) { goto free_and_exit; }
              
              f2 = fopen("huj2", ...)
              if (!f2) { goto free_and_exit; }
              
              mem = malloc(42*100500);
              if (!mem) { goto free_and_exit; }
              
              // Тут всё ок, все ресурсы доступны
              // ...
              free_and_exit:
              free(mem);
              if (f2) { fclose(f2); }
              if (f1) { fclose(f1); }
              
              return 42;

              Простой, понятный, надёжный код, лучше можно сделать только с «RAII». Без «goto» это была бы лапша из ифов с кучей копипасты (освобождать f1 бы пришлось в трёх местах: после f2, после mem и перед нормальным выходом), при этом куча копипасты растёт квадратично от количества открываемых ресурсов.
              Ответить
              • Ну вот, пока писал — умудрился проебаться с fclose(f1). Именно поэтому я за «RAII».
                Ответить
              • показать все, что скрытоvanished
                Ответить
              • Убрал goto, проверь:
                FILE *f1 = NULL, *f2 = NULL;
                void *mem = NULL;
                
                do {
                f1 = fopen("huj1", ...);
                if (!f1) { break; }
                
                f2 = fopen("huj2", ...)
                if (!f2) { break; }
                
                mem = malloc(42*100500);
                if (!mem) { break; }
                } while (0);
                
                // Тут всё ок, все ресурсы доступны
                // ...
                free(mem);
                if (f2) { fclose(f2); }
                if (f1) { fclose(f1); }
                
                return 42;


                Правда, с бряком могут быть проблемы, если есть вложенные циклы.
                Ответить
              • Перевёл на «кресты»:
                FILE *f1 = NULL, *f2 = NULL;
                void *mem = NULL;
                
                [&](){
                f1 = fopen("huj1", ...);
                if (!f1) { return; }
                
                f2 = fopen("huj2", ...)
                if (!f2) { return; }
                
                mem = malloc(42*100500);
                if (!mem) { return; }
                }();
                
                // Тут всё ок, все ресурсы доступны
                // ...
                free(mem);
                if (f2) { fclose(f2); }
                if (f1) { fclose(f1); }
                
                return 42;


                Надеюсь, ничего не напутал.
                Ответить
                • На крестах проще все в RAII'шные обёртки пихать и не течь.
                  Ответить
                  • Ещё идея: try ... catch или try ... finally.

                    «Watcom C» в «Windows» (и в «OS/2») поддерживает try даже в няшной сишке посредством SEH. К сожалению, портабельный вариант они родить не смогли.
                    Ответить
              • Ответить
                • Да, Золотая макака выше продемонстрировала.
                  Ответить
                • То ли дело «PHP», в котором есть break с параметром, указывающим, на сколько уровней нужно выпрыгнуть:
                  https://www.php.net/manual/ru/control-structures.break.php

                  Хотя всё равно опасная конструкция: если обернёшь цикл другим, придётся у всех бряков менять значение аргумента.
                  Ответить
                  • Какой пхп )))

                    То ли дело «Java»:
                    package com.journaldev.util;
                    
                    public class JavaBreakLabel {
                    
                    	public static void main(String[] args) {
                    		int[][] arr = { { 1, 2 }, { 3, 4 }, { 9, 10 }, { 11, 12 } };
                    		boolean found = false;
                    		int row = 0;
                    		int col = 0;
                    		// find index of first int greater than 10
                    		searchint:
                    
                    		for (row = 0; row < arr.length; row++) {
                    			for (col = 0; col < arr[row].length; col++) {
                    				if (arr[row][col] > 10) {
                    					found = true;
                    					// using break label to terminate outer statements
                    					break searchint;
                    				}
                    			}
                    		}
                    		if (found)
                    			System.out.println("First int greater than 10 is found at index: [" + row + "," + col + "]");
                    	}
                    
                    }

                    «Точно-точно не goto, зуб даю!»
                    Ответить
                    • У goto в сишке, по сути, три разумных применения - выход из пачки циклов (джава одобряет), обработка исключений (goto fail) и генереция FSM.

                      В общем-то в этих случаях код с goto неплохо читается, даже лучше чем без него.
                      Ответить
              • Ещё идея: в «gcc» можно использовать вложенные функции. Правда, писанины будет больше.
                Ответить
          • Вообще, я плохо знаком с одновозвратничеством, но краем уха слышал, что в основном они топят за «плавное» выполнение кода, чтобы не было разрывов. Поэтому, скорее всего, goto у них ещё в большей анафеме, чем многовозврат.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • чтобы бранч предикшен через окно овертона прокрутить
                Ответить
            • >секты одновозвратников
              >я плохо знаком с одновозвратничеством, но краем уха слышал

              ГК потихоньку деградирует.
              За весь тред ни разу не всплыла фамилия Дейкстра.

              >скорее всего, goto у них ещё в большей анафеме, чем многовозврат
              https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
              Ответить
              • Зато мы его вспоминали, когда обсуждали говнопаттерн «цикл Дейкстры» и когда обсуждали сложность стандарта языка Ада (целых 600 страниц).
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Да-а-а, если бы он почитал пхпклуб.ру — на месте б схватил инфаркт, инсульт, эпилепсию и мозг рака.
                    Повезло старику.
                    Ответить
                  • Смешно что Дейкстра был убеждённым противником программирования в стиле «проб и ошибок».
                    Которое сводится к вводу различных сочетаний букв и символов, пока программа наконец не скомпилируется.
                    Ответить
                  • Какой багор )))

                    Нужен же какой-то баланс между случайным клацаньем по кнопкам и просчитыванием всего в голове вместо компьютера.
                    Математика - это хорошо, но она сама же покажет, что если есть реальная задача, которую надо сделать наиболее эффективно, то придётся искать компромиссную точку минимума, а не впадать в крайности.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Подтверждаю.
                        Наверное, дело в том, что во времена Дейкстры компьютеры действительно были инструментами математиков, так как пользователей в современном смысле в те времена попросту не существовало.
                        Ответить
                        • Именно поэтому я за «времена Дейкстры».
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • >он написал программу для компьютера, который он даже не видел никогда!
                              Да я каждый день пишу такие программы.
                              Выполняются они на каких-то удалённых компьютерах, которых я ни разу физически не видел.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Питушня.

                                  Вы думаете, что ПИ знает заметно больше того деда - например, про внутренние питух-коды процессора или напряжения на ножках процессора под конкретными номерами?

                                  Или наоборот, дед вообще ничего не знал про старые ВМ*, и просто хреначил код на жс или брейнфаке под абстрактную ВМ**?

                                  Я думаю, дед знал то же самое, что и ПИ (в пересчёте на ...). Иначе он мог бы быть только кем-то вроде заказчика, а его код потом материли, перезаклеивали и перетыкивали.

                                  Разница с ПИ - пинг повыше и терминал картонный, а не пластиковый с магниевым сплавом. А так - что там, что там - частные имплементации SSH.
                                  _________
                                  * вычислительная машина
                                  ** виртуальная машина
                                  Ответить
                                  • Меня всегда зобавляло, что лишнехромосомные совки не сумели сами даже название кампутера придумать, а просто переписали IBM транслитом.
                                    Зее альзо: ксерокс, джинсы
                                    Ответить
                                    • Меня всегда зобавляло, что лишнехромосомные не сумели сами даже название разбавленного водой этанола придумать, а просто переписали vodka транслитом.
                                      Ответить
                                      • Ха, водка — это всего лишь этанолгидрат.
                                        Ответить
              • Просто «Considered Harmful» уже давно стал классикой и самим-собой подразумевающимся в подобных спорах. Про него каждый петух знает.
                В любом обсуждении goto Дейкстра упоминается неявно.
                Ответить

    Добавить комментарий