- Сообщения
- 8,673
- Репутация
- 2,486
Полезные советы и заметки - новичкам и не только
1. Если для вас понятно то что вы пишите, это ещё не значит что и остальным оно будет также очевидно! :ninja2:
2. Иногда, при желаний помочь другим, хочется просто показать на полном примере, но оно не всегда полезно для того кто нуждается в помощи ... Если бы за меня вот так всегда всё делали когда я начинал (показывали всё примерами, а не указывали на нужное направление), то навряд ли я бы развивался в изучении AutoIt'а :beer:
3. Помимо обязательного тега «code» для участков кода (и тега «autoit» для кода AutoIt-скриптов), используйте тег «spoiler» для больших кусков кода. Так легче читать сообщения, это поможет не отпугнуть тех, кто всё же решится вам помочь ;).
4. Размещая вопрос, желательно при этом выкладывать код проблемного участка вашего скрипта.
5. Старайтесь предоставить как можно больше деталей касательно вашей проблемы (но не приувиличивая), гадать ещё никто не научился.
6. Старайтесь не выкладывать один и тот же пример в модифицированном виде, лучше всего поправьте своё первоначальное сообщение, и сообщите об этом остальным в новом. Но если всё-же модификация заслуживает отдельного-нового поста (например, если хочется сохранить и предыдущую версию примера), и в ней многие функции повторяются (не изменённые), то лучше их не выкладывать, а просто указать на предыдущую версию примера. Таким образом, не пострадает общение на форуме, качество сообщении, и читабельность форума в целом .
7. Если у вас много времени, и так случилось что вы пишите сообщение довольно долго (пол часа скажем), то перед его отправкой лучше обновите страницу (на другом/й окне/вкладке), т.к возможно на ваш вопрос уже дали ответ, или (если вы пытаетесь помочь другим), похожее решение на ваше, уже предоставили, поэтому незачем плодить одни и те же решения/примеры, это затруднит в будущем поиск и нахождение действительно важного решения/ответа.
8. Ну и как (должно быть) известно, прежде чем что-либо спрашивать в этом (да и не только) разделе, используйте поиск, в нашем случае это:
Рекомендации по написанию скриптов
Типы данных
В AutoIt существует только один тип данных - Variant , поэтому для удобства написания скриптов рекомендуется использовать следующие имена переменных:
Первый набор символов после знака доллара ($) должен определять тип данных. Следующий список определяет префиксы и типы данных используемые с ними:
- $a<символ> - (Array) Массив данных - последующий символ взятый из списка ниже, определяет тип данных в массиве
- $b - (Binary data) Двоичные данные
- $h - (File or window handle) Дескриптор файла, окна, и т.д.
- $i - (Integer) Целое число
- $f - (Boolean) Логический тип, может принимать значения True или False
- $n - (Floating point number) Число с плавающей точкой
- $s - (String) Строка
- $v - (Variant) Вариант, неопределённый тип данных, базовый тип для AutoIt
- $t - (Struct) Структура в стиле C/C++, для использования в DllCall, в сообщениях WM_*, при обработке данных и т.п.
- $p - (Pointer) Указатель на структуру или на её элемент
Остальное имя переменной следует начинать с заглавной буквы, и оно должно отражать функциональность (свойства) переменной. Имена вроде “$iC” не приемлемы.
"$aiWeekDayNames" или "$iCounter" намного предпочтительнее.
Переведено с «User Defined Functions Standards».
P.S
От себя...
Такая манера написания скриптов уже стала почти стандартом среди AutoIt-кодеров, оно придаёт коду более читабельный и приятный вид.
Практика хорошего программирования
1. Почему не рекомендуется использовать Dim?
Потому что этот вызов может использовать глобальную переменную вместо локальной. Программист заранее должен знать используется ли переменная с тем же именем в глобальной области видимости. Если это UDF, то заранее знать этого невозможно. Это означает, что объявлению массива с помощью Dim должно предшествовать объявление с помощью Local (для локальной видимости внутри функции) или Global. В данном случае Dim используется для пересоздания массива. В остальных случаях использовать Local или Global.
2. Как избежать пересечение имён локальных переменных с глобальными переменными?
Используйте префикс, например $g_Var, который в имени содержит принадлежность глобальной области видимости. Если переменная не требует глобальной области видимости, то рекомендуется создавать её в локальной области видимости, чтобы уменьшить общее количество просматриваемых переменных и заботу по очистке содержимого переменных для уменьшения расходуемой памяти.
3. В чём преимущества ByRef?
Если используется вызов функции в цикле с передачей в функцию большого массива, то передача каждого параметра сопровождается копированием переменной в переменную создаваемую внутри функции с локальной областью видимости. Ключевое слово ByRef позволяет передать указатель на переменную и все операции, происходящие с ней внутри функции фактически, будут происходить с переменной, которая была передана в месте вызова функции. Отсутствие операции копирования существенно ускоряет работу цикла и меньше затрачиваемой памяти.
4. Почему рекомендуется использовать именованную константу вместо явного указания числа?
Использование чисел затрудняет чтение кода. Название константы содержит смысловую характеристику назначения константы. Особенно затрудняет чтение кода, когда число образовано суммированием констант. Более подробно можно прочитать статью "Магическое число (программирование)" на wikipedia: Магическое число (программирование)
5. Особенности использования переменной счётчика итераций в цикле For
Счётчик итерации ($i) функции For не требует объявления. При инициализации цикла он принудительно создаётся в локальной области видимости. Хорошей практикой кодирования является неиспользование переменной счётчика вне цикла. Хотя явного ограничения на использовании нет.
6. Почему рекомендуется суммировать стили с помощью BitOR?
Некоторые стили образованы суммированием стилей. Если стиль уже содержит добавляемую константу, то это искажает результат. Функция BitOR исключает возможность добавления константы в стиль, который уже содержит эту константу. Константы имеют значения 2^x, где x - положительное целое число, поэтому если к стилю с числовым значением 10 (8+2) добавить 2, то в результате получаем стиль 12 (8+4), а стиль с константой 2 отсутствует. Вот как это выглядит в двоичном коде:
00000001 = 1
00000010 = 2
00000100 = 4
00001000 = 8
00010000 = 16
00100000 = 32
00001010 = 8 + 2
00001100 = 8 + 4
7. Почему необходимо явно объявить все локальные переменные внутри функции?
Если локальная переменная внутри функции не объявлена принудительно, то при совпадении имени с глобальной переменной будет использоваться последняя. Поэтому все локальные переменные должны быть явно объявлены.
Смежные темы:
to be continued... :construction:
P.S
Любые предложения по улучшению, или исправлению вышеуказанных заметок, принимаются в ПМ.