Был код:
Но потом функция Self.SupressNextImmediate стала возвращать ТРИ значения - No, Yes, Always.;
Тогда я этот код предпочёл переписать так:
Конечно - можно было "мудрить" с OR, AND и NOT и "записать всё в одну строку". В стиле "Кернигана и Ричи".
Но я предпочёл именно ЭТОТ вариант.
Для меня ВАЖНЫ - ЧИТАЕМОСТЬ и САМОДОКУМЕНТИРУЕМОСТЬ кода.
Уже ДАВНО прошли те времена, когда экономили на перфокартах.
Да и на "байтах кода" - тоже...
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 и "записать всё в одну строку". В стиле "Кернигана и Ричи".
Но я предпочёл именно ЭТОТ вариант.
Для меня ВАЖНЫ - ЧИТАЕМОСТЬ и САМОДОКУМЕНТИРУЕМОСТЬ кода.
Уже ДАВНО прошли те времена, когда экономили на перфокартах.
Да и на "байтах кода" - тоже...
Комментариев нет:
Отправить комментарий