среда, 13 ноября 2013 г.

Коротко. Ещё о языках программирования и читабельности

Был код:
           if l_W.IsImmediate AND
              (not Self.SupressNextImmediate OR l_W.IsAnonimous)
              {OR (l_Ctx.rImmediateLevel > 0)} then
            l_W.DoIt(l_Ctx)
           else
           begin
            TkwCompiledWord(l_Ctx.rWordCompilingNow).DoAddCodePart(l_W, false, l_Ctx);
            AfterCodePartAdded(l_W, l_Ctx);
           end;//l_W.IsImmediate..

Но потом функция Self.SupressNextImmediate стала возвращать ТРИ значения - No, Yes, Always.;

Тогда я этот код предпочёл переписать так:


           procedure DoCompileWord;
           begin
            TkwCompiledWord(l_CompilingContext.rWordCompilingNow).DoAddCodePart(l_CurrentWord, NotAtStartOfCode, l_CompilingContext);
            AfterCodePartAdded(l_CurrentWord, l_CompilingContext);
           end;//l_W.IsImmediate..

           procedure DoRunWord;
           begin
            l_CurrentWord.DoIt(l_CompilingContext);
           end;
...
           if l_CurrentWord.NeedsRunWhileCompiling then
           begin
            Case Self.NeedsCompileNextWordWhileCompiling of
             No: 
              DoRunWord;
             Yes:
              if l_CurrentWord.IsAnonimous then
               DoRunWord
              else
               DoCompileWord;
             Always:
              DoCompileWord;
             else
              Assert(false);
            end;//Case Self.NeedsCompileNextWordWhileCompiling
           end//l_CurrentWord.NeedsRunWhileCompiling
           else
            DoCompileWord;

Конечно - можно было "мудрить" с OR, AND и NOT и "записать всё в одну строку". В стиле "Кернигана и Ричи".

Но я предпочёл именно ЭТОТ вариант.

Для меня ВАЖНЫ - ЧИТАЕМОСТЬ и САМОДОКУМЕНТИРУЕМОСТЬ кода.

 Уже ДАВНО прошли те времена, когда экономили на перфокартах.

Да и на "байтах кода" - тоже...

Комментариев нет:

Отправить комментарий