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