Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.84.18.52] |
|
Сообщ.
#1
,
|
|
|
Хотел бы поделиться некоторыми маленькими хитростями, позволяющими сократить объем кода, возможно вам пригодятся.
1. Использование функции IfThen Об этой функции мало кто знает, но на мой взгляд она заслуживает внимания. Объявлена она (а точнее - они, несколько перегруженных вариантов) в модуле Math. Эта простая функция подобна оператору IIF в VB, т.е. имеет три операнда: логическое выражение, значение при истинности выражения, значение при ложности выражения. Это позволяет вместо: if Conditional then X := Y else X := Z; писать X := IfThen(Conditional, Y, Z); Пример: K := IfThen(Width > Height, Width / Height, Height / Width); ВАЖНО: Не следует забывать что IfThen - это функция, а значит все параметры считаются перед вызовом всегда. Поэтому нельзя функцию использовать примерно таким образом: Value := IfThen(List.Count > 0, List[0], 0); Этот код приведет к исключению, если List.Count = 0, т.к. попытка вычислить параметр List[0] будет предпринята в любом случае вне зависимости от значения первого параметра. Здесь уже нужно явно писать if List.Count > 0 then Value := List[0] else Value := 0; 2. Использование функций Min/Max Про эти функции из модуля Math тоже часто забывают, а напрасно. Смотрите насколько удобнее вместо A := A - 1; if A < 0 then A := 0; писать A := Max(0, A - 1); Еще примеры использования A := Min(255, A + 1); // Не позволяем A превысить 255 A := Min(255, Max(0, B)); // Не позволяем A выйти за границы 0..255 3. Процедура двойного присваивания Напишем простую процедуру: procedure DoubleSet(var A, B: Extended; val_A, val_B: Extended); begin A := val_A; B := val_B; end; Ну и зачем нужна такая примитивная функция, спросите вы. Что мешает в случае нужды просто присвоить двум переменным новое значение? А вот в чем вся соль: опять таки, не забываем, что аргументы функции всегда рассчитываются до ее вызова. Что это дает? Задача номер раз: поменять местами два значения. В классическом решении мы заведем третью переменную и методом трех стаканов поменяем значния местами. Используя же нашу функцию мы просто пишем: DoubleSet(A, B, B, A); Задача номер два: вычислить элементы последовательности Фибоначчи (каждое следующее число равно сумме двух предыдущих) Смотрите как изящно эта задача решается используя нашу функцию: DoubleSet(A, B, 0, 1); while b < 100 do begin // Выведем все число до 100 writeln(B); DoubleSet(A, B, B, A + B); end; |