В данном случае вы не правы ни в 1 из пунктов. Если написать мой вариант целиком:
function CheckPDFHeader(f: file): boolean;
begin
foreach var ch in '%PDF' do
if f.ReadByte <> word(ch) then
exit;
Result := true;
end;
begin
var f: file;
Reset(f, '1.pdf'); // вообще лучше OpenBinary, тогда всё в 1 строчку
Writeln(CheckPDFHeader(f));
end.
Этот алгоритм ни сколько не сложнее, и по размеру такой же.
Следующее - тут вопрос не нескольких миллисекунд. В .Net ради того чтоб работало в каждом компе каждой культуры - серьёзно пожертвовали простотой внутренних алгоритмов.
У integer.Parse
, вон, несколько сотен строк реализации. Поэтому IntToStr
, в отличии от большинства остальных велосипедов из PABCSystem
- просто летает.
И чтение символов и строк использующее определённые кодировки - не на много лучше.
Ну вообще, тут всё не так ужасно.
У них нет ничего и близкого по затратам к чтению символов. Но всё же правильнее использовать BinaryReader:
-
Он поддерживает все стандартные типы. То есть все виды целых чисел (всех размеров и знаковости) и т.п.
-
file
, в целом, устарел. В основном это касается его процедурного синтаксиса, но не только.
И последнее, что касается общего случая:
@RAlex, вы не научите никого ничему хорошему, показывая красивый, но не более того, код. Таким кодом можно эффективно вербовать некрофилов, но не обучать.
Даже если работа такова, что повсеместно надо думать сначала о времени написания кода, и только после этого о качестве - чтоб писать красивые и короткие костыли, тоже надо хорошо разбираться в том что есть, чего нет и в том, как всё устроено.
Как, к примеру, тот факт что .LastIndexOf
ищет от конца до начала, то есть в обратном направлении. Вот на таком надо акцентировать внимание.
А создание костылей ради экономии времени и сил - это дело смекалки каждого лично. Такое умение приходит само собой, даже если пытаться специально от него отучать.