Меню

Първи стъпки в правене на сайтове

Влез Излез

Първи стъпки в JavaScript – част 3

Това е трета част от въведението в JavaScript, което правя. И тук ще представя някои основни принципи в програмирането, валидни в почти всички езици, така че ако имате предишен опит в програмирането можете просто да игнорирате този урок и да чакате да пусна нещо за по-напреднали. Ако обаче до момента не сте имали никакво взимане-даване с програмиране, препоръчвам ви да прочетете този урок след като вече сте прегледали предните два:

Условия

В предния урок споменах, че следва да разгледаме условията в програмирането. На английски терминът е if-statement. Като цяло ще забележите, че обичам да използвам английските термини при работа с компютърни езици, тъй като най-често те са и пряко свързани със синтаксиса. Освен това на английски можете да намерите много повече информация, отколкото на български. Все пак тези уроци са предназначени към българската аудитория, затова всеки път когато представям нещо ново, нещо, за което все още не е ставало въпрос, ще го описвам на български, запознавайки читателите и с английския еквивалент. В последствие, след като вече знаете за какво става дума, най-често ще използвам понятието в оригиналния му вариант (на английски).

Условията се използват в случай, в който искаме програмата/скриптът ни да извършва различни действия в зависимост от стойност на променлива или резултат от някакъв израз.

Например можем да направим един скрипт, който да ни съобщава, ако сме закъснели за работа (в примера ще приемем, че началото на работното ни време е 9 – каквото е моето всъщност).

var time = new Date();
if (time.getHours() > 9) {
	alert('Закъсняваш!');
}

В скрипта отначало създаваме нова променлива time, на която назначаваме стойност нов обект от тип Date. За типове обекти ще говорим друг път, за момента просто ще кажем, че по този начин променливата получава стойност отговоряща на конкретен момент от времето. По начина, по който сме я създали, този момент е моментът на самото й инициализиране. Тъй като програмните езици работят достатъчно бързо, а текущият скрипт е достатъчно кратък, можем да приемем, че цялостното изпълнение на програмата ще протече в този момент, така че стойността на променливата отговоря на момента (реално е много кратък период, но нека идеализираме, че е просто момент) на изпълнение на скрипта.

Пишем if, последван от скоби, които заграждат самото условие, което поставяме, след което имаме блок от код заграден във големи, още ги наричаме фигурни скоби. Този блок от код ще се изпълни само ако условието е вярно. С други думи – ако стойността на условието е равнозначна на булева променлива със стойност true.

Нека изясним какво представлява условието от нашия пример. В условието използваме променливата time, като след нея пишем точка. Чрез тази точка можем да достъпим белези (property-та) на променливата (в случая нашата променлива е обект, така че би могла да има property-та) или методи. Методите на една променлива са функции/действия, които се извършват и дават резултат определена стойност.

В предния урок казах, че програмирането има доста общо с математиката, така че нека тук да разгледаме какви са точно приликите.

В училище по математика сме учили за функции – мисля, че беше в 8-ми клас, така че всеки трябва да има достатъчни познания по въпроса. Ако случайно някой по-малък чете този урок – нека не се отчайва! Щом още от тази възраст чете уроци по програмиране от блогове, най-вероятно е достатъчно умен да разбере това, което ще напиша, дори и да не е учил функции в училище. По математика функциите ги описвахме горе-долу така:

f(x) = 2x+3

Това например е функция от X, която като резултат връща стойността на X умножена по 2 и накрая прибавя 3. По таметатика сме учили, че f(x) можем да го присвоим на Y:

y = f(x)

И сега може да ни накарат да начертаем графикана на функцията. Да речем, че сме учили в училище и си спомняме, че функции от типа ax+b, където a и b са константи (ехх… в предния урок май говорихме за константи и променливи) се наричат линейни, защото графиката им е права линия. Да речем, че си спомняме една аксиома от 5-ти клас, която гласи, че през две точки минава точно една права. От двата ни последни спомена изхождаме, че за да построим графиката, трябва да намерим две точки, през които минава тази права, след което трябва просто да съединим точките и сме готови (реално съединявайки точките получаваме само отсечка, но ако я продължим до безкрай става права).

Как обаче да намерим две точки? В случая алгебрата се свежда до геометрия. Там сме учили за координатни системи (май пак беше 5-ти клас). Декартовата координатна система, която използваме по презюнкция, има абсциса и ордината (права по X, която е хоризонтална, и по Y, която е вертикална). Не е случайно това, че функцията я присвоихме на y, а самата функция беше от променливата x. Ако заместим X с 0, полечаваме:

y = 2*0 + 3
y= 3

Ето, че вече имаме една точка с координати (0, 3). Нека заместим X с проезволно число – например 3 и пресметнем какво се получава за Y:

y = 2*3 + 3
y = 6 + 3
y = 9

Вече имаме и втора точка с координати (3, 9). Ако съединим двете точки вече няма да има нужда да пресмятаме функцията, а можем просто по графиката на функцията й да определим много други стойности на Y за определена стойност на X.

И сега какъв е извода – какво е функция. Функцията е поредица от действия, които трябва да извършим (може да са математически, може да са програмни инструкции), при което получаваме резултат. В общия случай резултатът е еднакъв при еднакъв аргумент, подаден на функцията. Все пак трябва да се има предвид и случаи на функции, които отчитат някаква произволност и тогава вече една и съща функция, с един и същи аргумент има различна стойност, но за момента няма да се обременяваме с такива неща.

Още 2-3 думи за някои съвпадащи термини в математиката и програмирането, тъй като самият аз смятам, че е полезно да се знаят, за да ни е по-лесно да разгадаем смисълът в програмирането. Невероятно улеснение е, ако знаем как е мислил този, който е създал самият език за програмиране, защото той го е създал така, че да му е удобен на него самия.

Преди малко споменахме отново константите. В математическото уравнение горе нарекохме стойностите a и b константи. Това е поради факта, че представяхме общ случай на линейна функция. Самите a и b в някоя конкретна функция биха били дефинирани с определени стойности (в нашия случай бяха равни съответно на 2 и 3). Защо тогава ги наричаме константи, след като и те могат веднъж да са 2 и 3, а друг път да са 324 и 2364? Защото двата случая биха били на различни функции. В една конкретна функция, стойностите на константите са определени. По същия начин една програма може да работи с константа A = 5, а друг път да променим стойността на константата на 10, но при самото изпълнение на програмата разчитаме на това, че имаме точно определено число, което остана неизменно по време на изпълнение на програмата. Надявам се, това да е внесло още малко яснота по въпроса за константите, разгледани първоначално в предния урок.

Да се върнем на метода getHours(). Защо това да е метод (функция на обект)? Защо да не е просто property? За да отговорим на това, трябва първо да се изясни начинът, по който променливите за време пазят някаква стойност. Във всички програмни езици, които съм срещал, това се свежда до начина, по който самите компютри обработват понятието за време, иначе създадено изцяло от хората. При компютрите най-често времето се представя просто с броя измивали секунди от 01.01.1970 г насам. Защо точно тогава? Тази дада се счита за начало на компютърната епоха. Какво точно ще рече това? И аз искам да знам, но за момента така и не съм намерил отговор, който да ме удовлетворяна (вярно, че не съм и търсил достатъчно, но това е друг въпрос). Конкретно в JavaScript времето всъщност не се пази като секунди изминали от 01.01.1970 до сега, а като милисекунди (просто умножете по 1000). Така че стойността на една такава променлива, инициализирана по времето, в което пиша този урок е 1345056534032. Така че функцията getHors() прави нужните математически преобразувания, за да престемне колко часа е на днешната дата и връща този резултат.

if-statement-ът поддържа и възможност да укажем какви действия искаме да извършим, ако условието не е изпълнено. Това се прави като добавим else (иначе):

var time = new Date();
if (time.getHours() > 9) {
	alert('Закъсняваш');
}

if (time.getHours() < 9) {
	alert('Има още време');
}

if (time.getHour() > 9) {
	alert('Закъсняваш');
} else {
	alert('Има още време');
}

Надявам се виждате как двата if-а можем да даменим с if-else и да получим същия резултат.

Разбира се след else можем да имаме и нов if, така че да направим скрипт, който ни поздравява по различен начин в зависимост от това колко часа е в момента:

var time = new Date();
if (time.getHours() < 11) {
	alert('Добро утро!');
} else if (time.getHours() < 18) {
	alert('Добър ден!');
} else {
	alert('Добър вечер!');
}

На човешки език: ако е преди 11 кажи "Добро утро!", иначе ако (е по-късно и) е преди 6 следобед кажи "Добър ден", иначе (ако е по-късно и от това) кажи "Добър вечер".

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax