Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, Философ, Вы писали:
Ф>>Да, говно, но не поэтому (не из-за var блока и не из-за скобочек).
Ф>>Из-за модульной парадигмы (namespace'ов приделанных сбоку, unit vars, initialization/finaliztion), из-за наследования конструкторов, и тучи других причин масштабом поменьше.
ARK>namespace'ы не нужны, а вот глобальные переменные это да, плохо.
Ф>>из-за наследования конструкторов
ARK>А что в этом плохого?
Потому, что профит от метаклассов полностью перекрывается тем, что это порождает трудноуловимые ошибки.
Попробуй, найти здесь ошибку вот здесь:
| | В чём ошибка я уже сказал |
| | unit MyFuckingUnit;
interface
implementation
type TA = class (TObject)
protected
FPrivateIntVar :Integer;
public
constructor Create(p_int :Integer);
procedure WriteHimself();
end;
type TB = class (TA)
public
constructor Creatе(p_int :Integer);
end;
type TC = class (TB)
public
constructor Creatе(p_int :Integer);
end;
var obj : TA;
{ TA }
constructor TA.Create(p_int :Integer);
begin
FPrivateIntVar := -1;
end;
procedure TA.WriteHimself;
begin
WriteLn(FPrivateIntVar);
end;
{ TB }
constructor TB.Creatе(p_int: Integer);
begin
inherited Create(p_int);
FPrivateIntVar := p_int;
end;
{ TC }
constructor TC.Creatе(p_int: Integer);
begin
inherited Creatе(p_int);
FPrivateIntVar := p_int;
end;
initialization
obj := TC.Create(1);
obj.WriteHimself(); //Ожидаем 1 увидеть, ибо в конструкторе "FPrivateIntVar := p_int", правильно? Запусти, и посмотри.
end.
|
| | |
Это крохотный пример из одного файла, и уже всё непросто. Что будет, если у тебя >1000 файлов в проекте?
Надо на собеседованиях для делфистов такие вопросы задавать. Давать вот этот код, и спрашивать: в каком случае на экране будет (-1) и почему?