На сеголдняшний день это пограммирование функций и процедур (до ООП еще пока далеко)
И так функции бывают разные. Еще на поре простого и спользования процедур и функций даже стандартный MsgBox
казался нреальным (да и сейчас я мало понимаю как он работает) . Первое что удевляло меня так это необязательные параметры. Это первый камень преткновения. Только через время я знал что для этого нужно всего лишь написать простое понятное слово Optional т.е. для меня эти показалось (судя поназванию) "опцией" функции или процедуры. Т.е. используя "опцию" можно направить работу ф-ии в нужное русло. Делалось это конечно элементарным if...then....else.
Паразительным было то, что использовать необязательные параметры процедуры (когда я дальше буду говорить процедуру, то буду подразумевать и ф-ю, т.к. ф-я это как мне кажется процедура, возвращающая значение, а не только
что-то выполняющая, причем это значение строго типизировано).
Так вот необязательные параметры процедуры
неудобно использовать для значений кроме булевых, т.к. в теле процедуры приходилось очень сильно "ветвить" условия
Это хорошо когда программер используя данную процедуру, указывает в необязательном параметре True или False по
поводу замены файла, при копировании например (строго сию секунду придуманный пример). А если допустим нужно при указании в "опции" 1 - файл сохраняется без замены, 2 - файл заменяется при сохранении, 3 - файл сохраняется при замене но в иное место (для этого видимо понадобится дополнительная опция "Куда сохранять", а потом, видимо в теле
процедуры проверять чтобы эту "обязательно указали")....и т.д.
Т.е. при указании опции небулевого значения рискую что-то да пропустить, не продумать и т.д. (не дай боже потом
переделать).
Двигаемся дальше. Добрые друзья-советчики подсказали (хотя по идее не нужно это подсказывать, это надо знать ибо
не знать это - стыдно) это конечно Enum. Ну ООООООчень удобная вещь. Очень приятная. Помню с каким удовольствием я использовал ф-ии с Enum-ом. НО. Вот блин. В качестве типа там выступают Longo-вые значения. Т.е. если в Энуме указать стринговое значение например пути сохранения файла, то он конечно работать не будет. Хотя возможно уже опять таки в теле процедуры проверять через ветвление условия, а лучше всего через Select Case эти стринговые значения. Т.е. нам уже не нужно делать так
- Код: Выделить всё
If Foo=1 then
действия с условием 1
else
if Foo=2 then
действия с условием 2
Замечу действия то одни и те же. Как бы параметр этих действий разные. Т.е. что-то малозначимое меняется. Используя Enum этого можно избежать. Т.е. ввести на уровне процедуры переменную и с помощьй Select Case выдавать такой параметр, сторог определенный.
Спросите почему этого нельзя делать с "Optional"....можно, но тогда придется проверять на ошибки программиста. Т.е. например корректность указания пути сохранения (существование например диска F:\)....
Но Enum никак нельзя защить в саму процедуру. Его нужно определить до процедуры. Что конечно накладывает свой
отпечаток. Следующая проблема, пока не решенная - это выход более одного результата по функции. Т.е. по примеру того как действует Split, получающая массив из строк, образованных из начальной строки путем деления его по заданному символу.
Это только предстоит узнать. Но также еще до конца не понятно где и как можно использовать Enum-ы кроме моего
варианта, как часто их используют. Правильно ли я использую Optional. Есть ли что-то еще в процедурах, чего я не знаю. И например что делать если ф-я должна заполнять поля формы чем-то ( названий полей ф-я то не знает)
Эх, прочитав таким бредом показалось.