Школоло / Говнокод #10066 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
function Ns(ds: char; var vs: byte): boolean;
begin
   case ds of
'Q': vs:= 81;
'W': vs:= 87;
'E': vs:= 69;
'R': vs:= 82;
'T': vs:= 84;
'Y': vs:= 89;
'U': vs:= 85;
'I': vs:= 73;
'O': vs:= 79;
'P': vs:= 80;
'A': vs:= 65;
'S': vs:= 83;
'D': vs:= 68;
'F': vs:= 70;
'G': vs:= 71;
'H': vs:= 72;
'J': vs:= 74;
'K': vs:= 75;
'L': vs:= 76;
'Z': vs:= 90;
'X': vs:= 88;
'C': vs:= 67;
'V': vs:= 86;
'B': vs:= 66;
'N': vs:= 78;
'M': vs:= 77;
else vs:= 0;
  end;
 if vs = 0 then Result:= false else Result:= true;
 end;

Определение кода виртуальных клавиш, вот что бывает, когда кто-то не знает матчасть, вся эта белиберда легко заменяется на :

function Ns(ds: char; var vs: byte): boolean;
begin
case ds of
'A'..'Z': vs:= byte(ds);
else vs:= 0;
end;
if vs = 0 then Result:= false else Result:= true;
end;

И не лень же было клаву мучить!

Запостил: Alegun Alegun, (Updated )

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

  • Я умещу этот код в две строки:
    function Ns(ds: char; var vs: byte): boolean;
    begin
        vs := byte(ds) * ord (ds in ['A'..'Z']);
        Result := vs <> 0;
    end;
    Ответить
    • легким движением руки код превращается... код превращается... в элегантный однострочник!
      Ответить
      • Самое смешное, сборка, из которой выдран этот кусок, работает совсем без него, поменялась логика 🙂
        Ответить
  • if vs = 0 then Result:= false else Result:= true;
    вот одно это воняет на весь модуль
    Ответить
    • Result := vs <> 0 хорошая замена, но так она уж больно скобками воняет. В явном присвоении значения булеанке думаю говнокода совсем нет, буков немного побольше только, зато и понятнее результат ИМХО. Или я не прав?
      Ответить
      • нет, это воняют не скобками, а незнанием логики и логических типов
        васичникам простительно, а поцкалистам уже нет
        Ответить
    • С этим согласен, но ведь оригинальная функция предполагает побочный эффект, инициализирующий второй аргумент.
      Ответить
  • Избавимся от умножения
    function Ns(ds: char; var vs: byte): boolean;
    begin
        Result :=ds in ['A'..'Z'];
        vs := byte(ds)  and (-ord (Result));
    end;
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8