|
|
15.04.10 |
VB6-программистамЯ очень люблю порядок и простоту в исходном коде программ, поэтому часто стараюсь избавиться от лишних операторов, сократить размер кода. Еще давно я узнал значение приятной функции IIf которая позволила избавиться мне от лишних операторов IF, если нужно вывести True или False в зависимости от значения переменной, например: boolActive = IIf(chk_act.Value, 1, 0) chk_act - это CheckBox, в зависимости от значения которого определяется значение булива BoolActive. Так родилась моя самодельная функция с названием BIf: Public Function BIf(row As Boolean, truepart, falsepart) If row Then BIf = truepart: Exit Function BIf = falsepart End Function Поразительно, но применение новая функция нашла себе везде, я прямо жить без нее не мог. А каждый раз ее использования давал повод для радости - никаких If'ов. Не будем рассматривать самый банальный случай ее использования, есть намного более интересные ситуации. Определить номер активного OptionButton, если дан массив из трех таких объектов: tmpByte = BIf(opt_hud_sp(0), 0, BIf(opt_hud_sp(1), 1, 2)) Определение значения переменной в зависимости от того, нажат ли Shift: Amplitude = BIf(Shift = 1, 2, 16) Рисование сложной сетки 32х32, которая еще поделена на квадраты 16х16: Dim bool16 As Boolean For i = 0 To 640 Step 16 pctEd.Line (i, 0)-(i, 480), BIf(Not bool16, clrGrid1, clrGrid2) bool16 = Not bool16 Next i For i = 0 To 480 Step 16 pctEd.Line (0, i)-(640, i), BIf(bool16, clrGrid1, clrGrid2) bool16 = Not bool16 Next i Впрочем, несмотря на всю свою полезность, функция кажется слишком банальной. Не удивлюсь, если не один я такое придумал. EDIT: После разговора с Yanex'ом я понял, что жутко ступил, и что еще давным давно неправильно понял значение функции IIf в результате чего заварилась вся эта каша. IIf оказывается, выполняет не то, что я писал выше, а ровно то же, что и моя самодельная функция. LOL. |
© 2004-2021, Vladikcomper E-Mail: [email protected] |