Перейти к контенту

Квэнди

  • записей
    7
  • комментариев
    25
  • просмотров
    37 919

Перлы Delphi


Kvendi

2 118 просмотров

не мог не поделиться. Через 8 лет активного писания в этой среде сегодня обратил внимание что функция booltostr, конвертирующая, соответственно boolean в string, встроенная в VCL возвращает странные результаты:

true='-1'

false='0'

посмотрел исходник этой функции и долго ржал... потом стало весьма грустно.....

var
 TrueBoolStrs: array of String;
 FalseBoolStrs: array of String;

const
 DefaultTrueBoolStr = 'True';   // DO NOT LOCALIZE
 DefaultFalseBoolStr = 'False'; // DO NOT LOCALIZE
.............
procedure VerifyBoolStrArray;
begin
 if Length(TrueBoolStrs) = 0 then
 begin
SetLength(TrueBoolStrs, 1);
TrueBoolStrs[0] := DefaultTrueBoolStr;
 end;
 if Length(FalseBoolStrs) = 0 then
 begin
SetLength(FalseBoolStrs, 1);
FalseBoolStrs[0] := DefaultFalseBoolStr;
 end;
end;
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
const
 cSimpleBoolStrs: array [boolean] of String = ('0', '-1');
begin
 if UseBoolStrs then
 begin
VerifyBoolStrArray;
if B then
  Result := TrueBoolStrs[0]
else
  Result := FalseBoolStrs[0];
 end
 else
Result := cSimpleBoolStrs[b];
end;

как- то после этого сразу исчезло желание ругать горе- программистов за качество кода.... если уж авторы Delphi такое творят...

3 комментария


Рекомендуемые комментарии

Насчет представления числа согласен, но ,судя по коду их конвертера, они совсем не об этом думали...

const

cSimpleBoolStrs: array [boolean] of String = ('0', '-1');

мало того:

исходя из строчки:

Result := cSimpleBoolStrs[b];

и из объявления массива

 cSimpleBoolStrs: array [boolean] of String = ('0', '-1');

можно сделать вывод что если входящая переменная будет иметь значение true то функция возвращает элемент массива с индексом 1, а не -1.

ну неужели нельзя было хотя бы написать так...

function booltostr(value:boolean;truestr:string='1';falsestr:string='0';errorstr:string=''):string;
begin
try
if value then
  result:=truestr
else
  result:=falsestr;
except
result:=errorstr;
end;
end;

на кой городить небоскреб там где подвала достаточно ?

Ссылка на комментарий

Уважаемый Kvendi!

Это давно модно ругать программистов из (уже бывшей) Borland

Пожалуйста, задумайтесь над тем для чего вообще существуют глобальные массивы TrueBoolStrs и FalseBoolStrs.

И тогда "перлы горе программистов" из Borland превратятся в почти гениальный код!!!!

Кстати, весьма полезно было бып прочесть ещё и справку Delphi по функции BoolToStr - она работает именно так, как и задумано/заявлено, в отличие от "подвального" кода.

Ссылка на комментарий
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.