Наблюдатель
Покинул форум
Сообщений всего: 37
Дата рег-ции: Дек. 2014
Репутация: 2
|
Здравствуйте, уважаемый разработчик! Изучая Кибор и написав огромный и запутанный код, я открыл для себя оператор function.
К сожалению, с точки зрения новичка, статья в учебнике очень запутанная, важные моменты пропадают в общем "полотенце" текста (их я еще раз проговорю ниже), пришлось разбираться методом тыка и чтением примеров скриптов с форума, где применяется этот оператор.
Итак, сперва поделюсь впечатлениями от использования function.
1. Код уменьшился в размерах. Одинаковые места в коде выносятся в функцию, и нет необходимости каждый раз копировать их в тело программы.
2. Код стал более читаемым (блок функций размещается в конце, тело программы становится чище, без нагромождения одинаковых строк)
3. Стало легче исправлять ошибки (не нужно править каждый повторяющийся участок, достаточно исправить нужное место в функции)
Теперь я хотел бы привести несколько примеров использования.
Дело в том, что по примерам из учебника, я вообще не понял, зачем оно нам надо, что писать в скобочках, что за return и куда его пихать. Зато по примерам в скриптах научился заменять куски кода на коротенькое слово:
1. Комбинации горячих клавиш
пример (Отобразить)CODE:
//Мне нужно что-то скопировать в буфер
ctrl_c();
//Теперь я хочу закрыть вкладку браузера
ctrl_w();
//БЛОК ФУНКЦИЙ:
//CTRL+C копировать
function ctrl_c(){pause(500); keydown (CONTROL); pause (300); key ('C'); pause (210); keyup (CONTROL); pause(500);}
//CTRL+V вставить
function ctrl_v(){pause(500); keydown (CONTROL); pause (300); key ('V'); pause (210); keyup (CONTROL); pause(500);}
//CTRL+W закрыть вкладку
function ctrl_w(){pause(500); keydown (CONTROL); pause (300); key ('W'); pause (210); keyup (CONTROL); pause(500);}
//ALT+F4 закрыть окно
function alt_f4(){pause(500); keydown (MENU); pause (300); key (F4); pause (210); keyup (MENU); pause(500);}
2.1. Значения переменных поменялись, а действия над ними те же.
простенький пример (Отобразить)
CODE:
int a=11; int b=14;
int d;
summa();
messagebox(format(d));
int a=22; int b=28;
int d;
summa();
messagebox(format(d));
//БЛОК ФУНКЦИЙ
//Вместо обычной суммы может быть код любой сложности
function summa(){d=a+b;}
2.2. В этом примере важно объявить все переменные вне функции, поскольку все, что внутри функции - видит только эта функция.
простенький пример НЕ БУДЕТ работать (Отобразить)
CODE:
int a=11; int b=14;
summa();
messagebox(format(d));
int a=22; int b=28;
summa();
messagebox(format(d));
//БЛОК ФУНКЦИЙ
//Вместо обычной суммы может быть код любой сложности
function summa(){int d; d=a+b;}
Мы объявили переменную d в функции, по логике мы сделали это перед messagebox(format(d)); , тем не менее "тело" программы ее не увидит.
2.3. Это касается также goto и их меток: goto внутри функции должен вести в любой участок внутри этой функции и не может отсылать "наружу", в тело программы. Это дает и небольшое преимущество: имена меток могут быть не уникальными.
3. Можно внутри одной функции ссылаться на другу функцию:
схематичный пример (Отобразить)
CODE:
код;
fun1();
//БЛОК ФУНКЦИЙ
function fun1(){
код;
fun2();
}
function fun2(){код;}
4. Хотел разобраться с массивами, но это выше моих сил, поэтому надеюсь на вашу помощь.
Задача банальная: как добавить в функцию загрузку, поиск и клик в центр изображения, меняя лишь входные данные, а именно адрес к изображению? Не заморачиваясь размерами загружаемой картинки и т.д.
CODE:
string adress="C:\1.bmp";
klik_centr();
function klik_centr(){код;}
На понятие пунктов 2.2 и 2.3 у меня ушло некоторое время, что и послужило причиной написания данного сообщения.
Всем спасибо. Надеюсь, данный пост будет кому-то полезен.
(Добавление)
UPD: По своему вопросу (пункт 4) нашел ответ на форуме.
Объяснено, как можно сделать и как нужно сделать.(Отредактировано автором: 18 Декабря, 2014 - 08:26:04) |