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

0

  1. 1
  2. 2
Result := not FExecuting;
if not Result then Exit;

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

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

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

  • не вижу ничего говнистого, мало контекста

    грамматикфюрер не прощает :р
    Ответить
  • может автор хотел сказать, что
    Result := not FExecuting;
    if FExecuting then Exit;
    несколько нагляднее?
    но конкретно это на говнокод не тянет.
    Ответить
    • А если FExecuting - функция (ну почему даже в Аде не додумались до запрета вызова функций без пустых скобок)? А если с побочным эффектом?
      Ответить
      • А если Result — функция? (в Дельфи не прокатит).
        А если Exit переопределена и в ней туча побочных эффектов?
        Ответить
            • проверил, да, можно таки определить ложный эхит, даже ворнингом не плюется
              Ответить
        • > А если Result — функция? (в Дельфи не прокатит).
          function TForm1.Result: boolean;
          begin
            ShowMessage('WTF????');
            Result := false;
          end;
          Вызывается через self.Result; вот же ж блин, зачем я узнал это???77
          Ответить
          • А можно и
            function Result: boolean;
            begin
              ShowMessage('WTF????');
              Result := false;
            end;
            Вызывается через Unit1.Result. Ну с Result хоть не так страшно, у локального Result приоритет выше, чем у переопределенного.
            Ответить
        • Если ексит переопределён, то автор мудак.
          А вот fexecuting - может быть и переопределена.
          Например, if OpenDialog1.Execute - с побочным эффектом, хотя по её виду не скажешь. Было бы Execute() - было бы понятно, но нет же, почему-то решили освободить паскалистов от написания двух скобочек, спасибо Вирту, блять, за это, а ещё спасибо ботланду за проперту, с которыми, блять ваще хуй поймёшь, что где, потому что она косит под переменную, а на самом деле это сраный вызов метода. Я вообще проперти в своих классах не использовал никогда (кроме когда совсем зелёный был) именно из-за этой путаницы, я лучше буду писать SelColor($123456) и сразу видеть, что это хитрожопый метод, но нет же, Color := $123456 - это же так модно смотрится, так сишарпненько, пидарасы, блять.
          Ответить
          • ну и дурак. Проперти в делфях были задолго до появления сишарпов.

            Проперти позволяют с одной стороны сохранять инкапсуляцию а с другой делать код более естественным.
            Ответить
        • а почему все забыли про
          type
            TMySuperProc = procedure;
          function GetProc: TMySuperProc;

          хотя, конечно, так вроде приоритеты другие и ничего не заработает
          Ответить
      • > А если FExecuting - функция
        Приставка F кагбэ намекает на просто field. Но да, лучше перепроверить 🙂
        Ответить
      • про функцию не подумал, потому что:
        1) префикс F - по стандарту это поле
        2) сам пишу всегда с пустыми скобочками, чтобы другим было видно, что это функция
        Ответить
    • обращение к стеку оптимальнее обращения к куче, не засчитано
      Ответить
  • люди смотрю и охреневаю неужели никто не заметил что данные 2 строчки разворачиваются в:
    if not not FExecute then Exit; что равносильно:
    if FExecute then Exit;
    вот это и есть говнокод. тупое непонятное решение которое просто и изящно можно записать 1 строчкой. Уж недумал что все настолько слепые. а вы начинаете тут полемику разводить функция/не функция
    Ответить
      • угу а что значит Result в Delphi помнишь? если помнишь то должен понимать почему это говнокод а есл не знаешь ну что ж... учите мат часть. и тем более эти 2 строчки не следуют правилу KISS (для тех кто в танке расшифровка "Сделай проще дурачок")
        Ответить
        • задам, перекрестясь, вопрос в третий раз, может разверзнется...
          Ответить
        • Я помню, что означает резулт в дельфе. Так что матчасть учи ты.
          Ответить
          • Ааа, я понял его, кажется! Ведь вызов функции возвращает результат в еах, и если сразу выйти, то в еах (то есть резулте) и будет храниться результат фекзекуте!!!
            Ответить
            • А компилятор не может засрать eax, если мы в явном виде резулту ничего не присваивали?
              Ответить
              • Не знаю, может и может.
                Вообще это я типа пошутил, потому что закладываться на особенности внутренней реализации - это говнокодно.
                Ответить
              • Ох ты ж бля, это же поле, да.
                Ну может компилятор в еах поле суёт перед сравнением, хотя тут не знаю.
                Ответить
                • всё равно Exit таки вернет то, что в Result записано
                  это ж не брутальный asm ret end
                  Ответить
                  • Дельфи по-любому втыкает mov eax, Result в конце, если не было директивы assembler в заголовке функции.
                    Ответить
                    • а скорее всего Exit оттранслируется в короткий прыг на конец
                      Ответить
  • О_о
    Я только что узнал, что функция может вызываться и без скобочек...
    Ответить

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

Из-за тебя ушел bormand, guest!

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


    8