SlideShare a Scribd company logo
1 of 34
Download to read offline
HTML5 приложения за Android
Урок 02
Леон Анави
@leonanavi
leon@anavi.org
С подкрепата на:
@leonanavi
Съдържание
 Въведение в JavaScript
 Въведение в Git
 Регистрация и работа с GitHub
@leonanavi
JavaScript променливи
 Декларация:
var име_на_променлива;
 Името трябва да започва с буква или долна черта
 В името може да има букви, цифри или долни черти
 Не може да има интервал в името
 Не може името да съвпада с JS ключова дума
 Има разлика между малки и големи букви
var foo = 10;
var bar = "Hello World";
@leonanavi
JavaScript примитивни типове
 Числа, например: 10, 3.14
 Булеви стойности, например: true, false
 Низове (т.е. string), например: "Hello World!"
 Променлива без стойност: null
 Недефинирана променлива: undefined
@leonanavi
JavaScript масиви
 Структура за съхранение и достъп до
множество еднотипни данни
 Наименования по правилата за променливи
 Създаване на масив:
var people3 = ["John", "Tom", "Wayne"];
 Алтернативно създаване на масив:
var people =new Array("John", "Tom", "Wayne");
 Друго алтернативно създаване на масив:
var people2 = new Array(2);
people2[0] = "John"; people2[1] = "Tom";
@leonanavi
JavaScript методи за масиви
 Достъп до елемент от масива: console.log(people[0]);
 Определяне на броя на елементите в масив: .length
 Премахване на последния елемент: .pop()
 Добавяне на елемент в края: .push()
 Премахване на първия елемент: .shift()
 Добавяне на елемент в началото: .unshift()
 Изтриване на елемент по индекс: delete people[1];
 Добавяне/изтриване на елементи чрез .splice()
 Сортиране: .sort()
@leonanavi
JavaScript условни конструкции
 Проверяват дали дадено условие е изпълнено
 If-else
if (условие) {
/* TODO */
} else {
// TODO
}
 Switch
switch(foo) {
case "John":
console.log("foo");
break;
default:
console.log("bar");
}
 Въпросителна ?
var foo = (1 > bar) ? 10 : 20;
@leonanavi
JavaScript цикли
 For
 While
 Do / Whie
 For / in, например:
var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("o." + prop + " = " + obj[prop]);
}
// Output:
// "o.a = 1"
// "o.b = 2"
// "o.c = 3"
@leonanavi
JavaScript функции
 Блок от код, който извършва дадена задача и може
да се извиква многократно
 Синтаксис:
function Name(параметър1, …, параметърN) {
//код
}
 Пример:
function plus(p1, p2) {
return p1 + p2;
}
console.log('1 + 2 = ' + plus(1, 2));
@leonanavi
JavaScript Closures
 Анонимни функции, които се изпълняват сами и
позволяват създаването на private променливи.
 Пример:
var add = (function () {
var counter = 0;
return function () {
return counter += 1;
}
})();
add();
add();
var final = add();
console.log('final: '+final);
Резултат:
final: 3
@leonanavi
JavaScript обекти
 Обектът съдържа свойства и методи (функции)
 Наименува се по правилата за имена на променливи
 Могат да се създават чрез функции или
обектни инициализатори със синтаксис:
име_на_обект={свойство:стойност}
 Подробна информация:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
@leonanavi
JavaScript обекти
var person = {
firstName:"John",
lastName:"Doe",
name : function() {
return this.firstName + " " + this.lastName;
}
};
console.log("first name: " + person.firstName);
console.log("last name: " + person["lastName"]);
console.log("name: " + person.name());
@leonanavi
JavaScript обекти
function createPerson() {
this.firstName = "John";
this.lastName = "Doe";
this.name = function() {
return this.firstName + " " + this.lastName;
}
}
var person = new createPerson();
console.log("first name: " + person.firstName);
console.log("last name: " + person["lastName"]);
console.log("name: " + person.name());
@leonanavi
JSON
 Формат за представяне на JavaScript обекти
 Подходящ за сериализация на данни
 Удобен за четене и от хора
 Пример:
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna","lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
@leonanavi
JavaScript стриктен режим
"use strict";
 Въвежда ограничения като по този начин
предпазва от грешки
 Може да се използва за целия скрипт или за
отделна функция
 Не дава да се декларират глобални променливи
без var
 За останалите ограничения разгледайте:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
var foo = 1;
if (foo = 2) { console.log('foo is 2'); }
var bar = 1;
if (bar == 2) { console.log('bar is 2'); }
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
var foo = 1;
if (2 == foo) { console.log('foo is 2'); }
if (2 = foo) { console.log('foo is 2'); }
Извод: добра професионална практика е при
сравнения константите да са от ляво.
Резултат:
Uncaught Reference Error: Invalid left-hand side in assignment
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
var foo = 1;
var bar = true;
if (foo == bar) {
console.log("foo == bar");
}
if (foo === bar) {
console.log("foo === bar");
}
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
function printCity() {
var city = "Plovdiv";
console.log(city);
}
var city = "Sofia";
printCity();
console.log(city);
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
function foo(bar) {
console.log("bar: "+bar);
}
foo();
foo(10);
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
if (!0) { console.log("0 is false"); }
if (!false) { console.log("false is false"); }
if (!'') { console.log("'' is false"); }
if (undefined) { console.log('undefined is false'); }
if (!null) { console.log('null is false'); }
if (!0/0) { console.log('NaN is false'); }
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
function returnObject() {
return
{ name: "John" };
}
var person = returnObject();
console.log(person);
@leonanavi
JavaScript капани
Какво ще стане при изпълнения на следния код?
var varA = {
prop: 37,
f: function() {
return this.prop;
}
};
var varB = {prop: 37};
function f() {
return this.prop;
}
console.log(varA.f());
console.log(this.varA.f());
console.log(varB.f());
@leonanavi
JavaScript капани
var foo = 0.1 * 0.2;
console.log("foo: " + foo);
Резултат:
foo: 0.020000000000000004
var bar = 1 + "2" + 3.50;
console.log("bar: " + bar);
Резултат:
bar: 123.5
var foobar = 1 + parseInt("2") + 3.50;
console.log("foobar: " + foobar);
Резултат:
foobar: 6.5
@leonanavi
JavaScript Callback Hell
fs.readdir(source, function(err, files) {
if (err) {
console.log('Error finding files: ' + err)
} else {
files.forEach(function(filename, fileIndex) {
console.log(filename)
gm(source + filename).size(function(err, values) {
if (err) {
console.log('Error identifying file size: ' + err)
} else {
console.log(filename + ' : ' + values)
aspect = (values.width / values.height)
widths.forEach(function(width, widthIndex) {
height = Math.round(width / aspect)
console.log('resizing ' + filename + 'to ' + height + 'x' + height)
this.resize(width, height).write(destination + 'w' + width + '_' + filename, function(err) {
if (err) console.log('Error writing file: ' + err)
})
}.bind(this))
}
})
})
}
})
Идеи за избягване на: http://callbackhell.com/
@leonanavi
JavaScript полезни връзки
 Mozilla Developer Network: JavaScript
https://developer.mozilla.org/en-US/docs/Web/JavaScript
 w3schools: JavaScript Tutorial
http://www.w3schools.com/js/
 Уеб дизайн, ФМИ към СУ
http://www.fmi.uni-sofia.bg/econtent/web-design
 ES6: The Good Parts, Борис Симандов, OpenFest 2014
https://www.youtube.com/watch?v=-CirKivxCwo
 JavaScript основи - видео уроци, Telerik Academy
http://academy.telerik.com/student-courses/web-design-and-ui/javascript-fundamentals/video
@leonanavi
ПОЧИВКА
@leonanavi
Git
 Система за контрол на версиите на кода
 Децентрализирана
 Open source
 Създадена от Линус Торвалдс за кода на Linux kernel
GitHub
 Онлайн система, базирана на Git
 Безплатни публични Git репота
 Допълнителни услуги като bug tracking, wiki и други
 Развива се и като социална мрежа за програмисти :)
@leonanavi
Основни Git команди
 Сваляне локално на кода от Git репо с clone:
git clone https://github.com/leon-anavi/html5-android-course
 Сваляне на промени във вече съществуващо локално
репо на проекти с pull:
git pull
 Смяна на Git клон (т.нар. branch) с checkout:
git checkout foo
 Отказ и изтриване на всички локални промени:
git reset --hard HEAD
@leonanavi
Основни Git команди
 Списък на променените файлове със status:
git status
 Преглеждане на промени по файл с diff:
git diff foo.txt
 Маркиране на файл за добавяне с add:
git add bar.txt
 Изтриване на файли с remove:
git remove foobar.txt
@leonanavi
Основни Git команди
 Запазване на промените с локалното репо с commit:
git commit -m "Информация за промените"
 Предаване на запазените промени от локалното репо
към други репота със push:
git push
 Показване на хеш на текущия commit в репо:
git rev-parse HEAD
@leonanavi
Упражнения
 Регистрация в GitHub.
 Създаване на репо с open source лиценз и README.
 Напишете JavaScript функция, която изписва числата
от 1 до 100. Всяко число, което се дели на 3 трябва да
бъде заменено с Fizz. Всяко число, което се дели на 5
да се замени с Buzz. Всяко число, което се дели
и на 3, и на 5, трябва да се занеми с FizzBuzz.
 Публикувайте решението в GitHub.
@leonanavi
KEEP CALM
AND
SUPPORT
FOSS

More Related Content

Viewers also liked

Konopravda-ПРАВДА-8
Konopravda-ПРАВДА-8Konopravda-ПРАВДА-8
Konopravda-ПРАВДА-8aiWorker.com
 
Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...
Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...
Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...Flavio JP Bressan
 
SellingYourHouseWinter2016
SellingYourHouseWinter2016SellingYourHouseWinter2016
SellingYourHouseWinter2016Frank Messina
 
BEST-konferansen 2015 - Øyvind Såtvedt
BEST-konferansen 2015  - Øyvind SåtvedtBEST-konferansen 2015  - Øyvind Såtvedt
BEST-konferansen 2015 - Øyvind Såtvedtnucleusas
 
HongKongdetail wall&ceiling
HongKongdetail wall&ceilingHongKongdetail wall&ceiling
HongKongdetail wall&ceilingWouter Dolk
 
Saturn steel corporation
Saturn steel corporationSaturn steel corporation
Saturn steel corporationB2bbazar
 
proyecto educativo
proyecto educativoproyecto educativo
proyecto educativomayra123
 

Viewers also liked (10)

Konopravda-ПРАВДА-8
Konopravda-ПРАВДА-8Konopravda-ПРАВДА-8
Konopravda-ПРАВДА-8
 
Puzzle level 1
Puzzle level 1Puzzle level 1
Puzzle level 1
 
Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...
Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...
Lançamento do Serviço de Internet VSAT Banda KA Yahclick Pré Pago Flavio JP B...
 
SellingYourHouseWinter2016
SellingYourHouseWinter2016SellingYourHouseWinter2016
SellingYourHouseWinter2016
 
BEST-konferansen 2015 - Øyvind Såtvedt
BEST-konferansen 2015  - Øyvind SåtvedtBEST-konferansen 2015  - Øyvind Såtvedt
BEST-konferansen 2015 - Øyvind Såtvedt
 
HongKongdetail wall&ceiling
HongKongdetail wall&ceilingHongKongdetail wall&ceiling
HongKongdetail wall&ceiling
 
Saturn steel corporation
Saturn steel corporationSaturn steel corporation
Saturn steel corporation
 
CV_Abdulbasit
CV_AbdulbasitCV_Abdulbasit
CV_Abdulbasit
 
proyecto educativo
proyecto educativoproyecto educativo
proyecto educativo
 
OCEA®brochure (6)
OCEA®brochure (6)OCEA®brochure (6)
OCEA®brochure (6)
 

Similar to HTML5 приложения за Android, урок 2

Демо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковДемо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковSvetlin Nakov
 
JavaScript - езикът с много приложения
JavaScript - езикът с много приложенияJavaScript - езикът с много приложения
JavaScript - езикът с много приложенияStefan Krastev
 
HTML5 приложения за Android, урок 5
HTML5 приложения за Android, урок 5HTML5 приложения за Android, урок 5
HTML5 приложения за Android, урок 5Leon Anavi
 
AJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърAJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърsvilen.ivanov
 
HTML5 приложения за Android, урок 6
HTML5 приложения за Android, урок 6HTML5 приложения за Android, урок 6
HTML5 приложения за Android, урок 6Leon Anavi
 

Similar to HTML5 приложения за Android, урок 2 (10)

Why do we need a language like go?
Why do we need a language like go?Why do we need a language like go?
Why do we need a language like go?
 
Демо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин НаковДемо урок по програмиране със Светлин Наков
Демо урок по програмиране със Светлин Наков
 
JavaScipt and AJAX Programming
JavaScipt and AJAX ProgrammingJavaScipt and AJAX Programming
JavaScipt and AJAX Programming
 
Web Programming with JavaScript and Ajax
Web Programming with JavaScript and AjaxWeb Programming with JavaScript and Ajax
Web Programming with JavaScript and Ajax
 
C++ OpenFest 2015
C++ OpenFest 2015C++ OpenFest 2015
C++ OpenFest 2015
 
JavaScript - езикът с много приложения
JavaScript - езикът с много приложенияJavaScript - езикът с много приложения
JavaScript - езикът с много приложения
 
HTML5 приложения за Android, урок 5
HTML5 приложения за Android, урок 5HTML5 приложения за Android, урок 5
HTML5 приложения за Android, урок 5
 
AJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърAJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузър
 
HTML5 приложения за Android, урок 6
HTML5 приложения за Android, урок 6HTML5 приложения за Android, урок 6
HTML5 приложения за Android, урок 6
 
Стар проект на Благо?!
Стар проект на Благо?!Стар проект на Благо?!
Стар проект на Благо?!
 

More from Leon Anavi

Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...
Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...
Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...Leon Anavi
 
Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...
Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...
Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...Leon Anavi
 
Integrating VNC in Weston with the Yocto Project and OpenEmbedded
Integrating VNC in Weston with the Yocto Project and OpenEmbeddedIntegrating VNC in Weston with the Yocto Project and OpenEmbedded
Integrating VNC in Weston with the Yocto Project and OpenEmbeddedLeon Anavi
 
Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?Leon Anavi
 
Linux обновления с RAUC и Docker
Linux обновления с RAUC и DockerLinux обновления с RAUC и Docker
Linux обновления с RAUC и DockerLeon Anavi
 
How to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux DevicesHow to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux DevicesLeon Anavi
 
Open Hardware Makers
Open Hardware MakersOpen Hardware Makers
Open Hardware MakersLeon Anavi
 
Open Source Tools for Making Open Source Hardware
Open Source Tools for Making Open Source HardwareOpen Source Tools for Making Open Source Hardware
Open Source Tools for Making Open Source HardwareLeon Anavi
 
A/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the futureA/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the futureLeon Anavi
 
Surfing on an Interactive Kiosk
Surfing on an Interactive KioskSurfing on an Interactive Kiosk
Surfing on an Interactive KioskLeon Anavi
 
Linux дистрибуции и софтуерни обновления за вградени устройства
Linux дистрибуции и софтуерни обновления за вградени устройства Linux дистрибуции и софтуерни обновления за вградени устройства
Linux дистрибуции и софтуерни обновления за вградени устройства Leon Anavi
 
Getting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiGetting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiLeon Anavi
 
Automotive Grade Linux on Raspberry Pi: How Does It Work?
Automotive Grade Linux on Raspberry Pi: How Does It Work?Automotive Grade Linux on Raspberry Pi: How Does It Work?
Automotive Grade Linux on Raspberry Pi: How Does It Work?Leon Anavi
 
Comparison of Open Source Software Home Automation Tools
Comparison of Open Source Software Home Automation ToolsComparison of Open Source Software Home Automation Tools
Comparison of Open Source Software Home Automation ToolsLeon Anavi
 
Практични примери за device tree overlays на Raspberry Pi
Практични примери за device tree overlays на Raspberry PiПрактични примери за device tree overlays на Raspberry Pi
Практични примери за device tree overlays на Raspberry PiLeon Anavi
 
The Software Developer’s Guide to Open Source Hardware
The Software Developer’s Guide to Open Source HardwareThe Software Developer’s Guide to Open Source Hardware
The Software Developer’s Guide to Open Source HardwareLeon Anavi
 
Making Open Source Hardware for Retrogaming on Raspberry Pi
Making Open Source Hardware for Retrogaming on Raspberry PiMaking Open Source Hardware for Retrogaming on Raspberry Pi
Making Open Source Hardware for Retrogaming on Raspberry PiLeon Anavi
 
Вграждане на умни гласови асистенти в устройства с Linux
Вграждане на умни гласови асистенти в устройства с LinuxВграждане на умни гласови асистенти в устройства с Linux
Вграждане на умни гласови асистенти в устройства с LinuxLeon Anavi
 
Comparison of Voice Assistant SDKs for Embedded Linux Devices
 Comparison of Voice Assistant SDKs for Embedded Linux Devices Comparison of Voice Assistant SDKs for Embedded Linux Devices
Comparison of Voice Assistant SDKs for Embedded Linux DevicesLeon Anavi
 
Open Source MQTT Brokers
Open Source MQTT BrokersOpen Source MQTT Brokers
Open Source MQTT BrokersLeon Anavi
 

More from Leon Anavi (20)

Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...
Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...
Screen Sharing on Raspberry Pi 5 Using VNC in Weston and Wayland with the Yoc...
 
Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...
Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...
Как да играем компютърни игри с Nintendo Wii Nunchuk чрез Raspberry Pi RP2040...
 
Integrating VNC in Weston with the Yocto Project and OpenEmbedded
Integrating VNC in Weston with the Yocto Project and OpenEmbeddedIntegrating VNC in Weston with the Yocto Project and OpenEmbedded
Integrating VNC in Weston with the Yocto Project and OpenEmbedded
 
Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?Как да убием и последната дискета с Open Source технологии?
Как да убием и последната дискета с Open Source технологии?
 
Linux обновления с RAUC и Docker
Linux обновления с RAUC и DockerLinux обновления с RAUC и Docker
Linux обновления с RAUC и Docker
 
How to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux DevicesHow to Choose a Software Update Mechanism for Embedded Linux Devices
How to Choose a Software Update Mechanism for Embedded Linux Devices
 
Open Hardware Makers
Open Hardware MakersOpen Hardware Makers
Open Hardware Makers
 
Open Source Tools for Making Open Source Hardware
Open Source Tools for Making Open Source HardwareOpen Source Tools for Making Open Source Hardware
Open Source Tools for Making Open Source Hardware
 
A/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the futureA/B Linux updates with RAUC and meta-rauc-community: now & in the future
A/B Linux updates with RAUC and meta-rauc-community: now & in the future
 
Surfing on an Interactive Kiosk
Surfing on an Interactive KioskSurfing on an Interactive Kiosk
Surfing on an Interactive Kiosk
 
Linux дистрибуции и софтуерни обновления за вградени устройства
Linux дистрибуции и софтуерни обновления за вградени устройства Linux дистрибуции и софтуерни обновления за вградени устройства
Linux дистрибуции и софтуерни обновления за вградени устройства
 
Getting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiGetting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry Pi
 
Automotive Grade Linux on Raspberry Pi: How Does It Work?
Automotive Grade Linux on Raspberry Pi: How Does It Work?Automotive Grade Linux on Raspberry Pi: How Does It Work?
Automotive Grade Linux on Raspberry Pi: How Does It Work?
 
Comparison of Open Source Software Home Automation Tools
Comparison of Open Source Software Home Automation ToolsComparison of Open Source Software Home Automation Tools
Comparison of Open Source Software Home Automation Tools
 
Практични примери за device tree overlays на Raspberry Pi
Практични примери за device tree overlays на Raspberry PiПрактични примери за device tree overlays на Raspberry Pi
Практични примери за device tree overlays на Raspberry Pi
 
The Software Developer’s Guide to Open Source Hardware
The Software Developer’s Guide to Open Source HardwareThe Software Developer’s Guide to Open Source Hardware
The Software Developer’s Guide to Open Source Hardware
 
Making Open Source Hardware for Retrogaming on Raspberry Pi
Making Open Source Hardware for Retrogaming on Raspberry PiMaking Open Source Hardware for Retrogaming on Raspberry Pi
Making Open Source Hardware for Retrogaming on Raspberry Pi
 
Вграждане на умни гласови асистенти в устройства с Linux
Вграждане на умни гласови асистенти в устройства с LinuxВграждане на умни гласови асистенти в устройства с Linux
Вграждане на умни гласови асистенти в устройства с Linux
 
Comparison of Voice Assistant SDKs for Embedded Linux Devices
 Comparison of Voice Assistant SDKs for Embedded Linux Devices Comparison of Voice Assistant SDKs for Embedded Linux Devices
Comparison of Voice Assistant SDKs for Embedded Linux Devices
 
Open Source MQTT Brokers
Open Source MQTT BrokersOpen Source MQTT Brokers
Open Source MQTT Brokers
 

HTML5 приложения за Android, урок 2

  • 1. HTML5 приложения за Android Урок 02 Леон Анави @leonanavi leon@anavi.org С подкрепата на:
  • 2. @leonanavi Съдържание  Въведение в JavaScript  Въведение в Git  Регистрация и работа с GitHub
  • 3. @leonanavi JavaScript променливи  Декларация: var име_на_променлива;  Името трябва да започва с буква или долна черта  В името може да има букви, цифри или долни черти  Не може да има интервал в името  Не може името да съвпада с JS ключова дума  Има разлика между малки и големи букви var foo = 10; var bar = "Hello World";
  • 4. @leonanavi JavaScript примитивни типове  Числа, например: 10, 3.14  Булеви стойности, например: true, false  Низове (т.е. string), например: "Hello World!"  Променлива без стойност: null  Недефинирана променлива: undefined
  • 5. @leonanavi JavaScript масиви  Структура за съхранение и достъп до множество еднотипни данни  Наименования по правилата за променливи  Създаване на масив: var people3 = ["John", "Tom", "Wayne"];  Алтернативно създаване на масив: var people =new Array("John", "Tom", "Wayne");  Друго алтернативно създаване на масив: var people2 = new Array(2); people2[0] = "John"; people2[1] = "Tom";
  • 6. @leonanavi JavaScript методи за масиви  Достъп до елемент от масива: console.log(people[0]);  Определяне на броя на елементите в масив: .length  Премахване на последния елемент: .pop()  Добавяне на елемент в края: .push()  Премахване на първия елемент: .shift()  Добавяне на елемент в началото: .unshift()  Изтриване на елемент по индекс: delete people[1];  Добавяне/изтриване на елементи чрез .splice()  Сортиране: .sort()
  • 7. @leonanavi JavaScript условни конструкции  Проверяват дали дадено условие е изпълнено  If-else if (условие) { /* TODO */ } else { // TODO }  Switch switch(foo) { case "John": console.log("foo"); break; default: console.log("bar"); }  Въпросителна ? var foo = (1 > bar) ? 10 : 20;
  • 8. @leonanavi JavaScript цикли  For  While  Do / Whie  For / in, например: var obj = {a:1, b:2, c:3}; for (var prop in obj) { console.log("o." + prop + " = " + obj[prop]); } // Output: // "o.a = 1" // "o.b = 2" // "o.c = 3"
  • 9. @leonanavi JavaScript функции  Блок от код, който извършва дадена задача и може да се извиква многократно  Синтаксис: function Name(параметър1, …, параметърN) { //код }  Пример: function plus(p1, p2) { return p1 + p2; } console.log('1 + 2 = ' + plus(1, 2));
  • 10. @leonanavi JavaScript Closures  Анонимни функции, които се изпълняват сами и позволяват създаването на private променливи.  Пример: var add = (function () { var counter = 0; return function () { return counter += 1; } })(); add(); add(); var final = add(); console.log('final: '+final); Резултат: final: 3
  • 11. @leonanavi JavaScript обекти  Обектът съдържа свойства и методи (функции)  Наименува се по правилата за имена на променливи  Могат да се създават чрез функции или обектни инициализатори със синтаксис: име_на_обект={свойство:стойност}  Подробна информация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
  • 12. @leonanavi JavaScript обекти var person = { firstName:"John", lastName:"Doe", name : function() { return this.firstName + " " + this.lastName; } }; console.log("first name: " + person.firstName); console.log("last name: " + person["lastName"]); console.log("name: " + person.name());
  • 13. @leonanavi JavaScript обекти function createPerson() { this.firstName = "John"; this.lastName = "Doe"; this.name = function() { return this.firstName + " " + this.lastName; } } var person = new createPerson(); console.log("first name: " + person.firstName); console.log("last name: " + person["lastName"]); console.log("name: " + person.name());
  • 14. @leonanavi JSON  Формат за представяне на JavaScript обекти  Подходящ за сериализация на данни  Удобен за четене и от хора  Пример: {"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna","lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]}
  • 15. @leonanavi JavaScript стриктен режим "use strict";  Въвежда ограничения като по този начин предпазва от грешки  Може да се използва за целия скрипт или за отделна функция  Не дава да се декларират глобални променливи без var  За останалите ограничения разгледайте: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
  • 16. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? var foo = 1; if (foo = 2) { console.log('foo is 2'); } var bar = 1; if (bar == 2) { console.log('bar is 2'); }
  • 17. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? var foo = 1; if (2 == foo) { console.log('foo is 2'); } if (2 = foo) { console.log('foo is 2'); } Извод: добра професионална практика е при сравнения константите да са от ляво. Резултат: Uncaught Reference Error: Invalid left-hand side in assignment
  • 18. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? var foo = 1; var bar = true; if (foo == bar) { console.log("foo == bar"); } if (foo === bar) { console.log("foo === bar"); }
  • 19. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? function printCity() { var city = "Plovdiv"; console.log(city); } var city = "Sofia"; printCity(); console.log(city);
  • 20. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? function foo(bar) { console.log("bar: "+bar); } foo(); foo(10);
  • 21. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? if (!0) { console.log("0 is false"); } if (!false) { console.log("false is false"); } if (!'') { console.log("'' is false"); } if (undefined) { console.log('undefined is false'); } if (!null) { console.log('null is false'); } if (!0/0) { console.log('NaN is false'); }
  • 22. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? function returnObject() { return { name: "John" }; } var person = returnObject(); console.log(person);
  • 23. @leonanavi JavaScript капани Какво ще стане при изпълнения на следния код? var varA = { prop: 37, f: function() { return this.prop; } }; var varB = {prop: 37}; function f() { return this.prop; } console.log(varA.f()); console.log(this.varA.f()); console.log(varB.f());
  • 24. @leonanavi JavaScript капани var foo = 0.1 * 0.2; console.log("foo: " + foo); Резултат: foo: 0.020000000000000004 var bar = 1 + "2" + 3.50; console.log("bar: " + bar); Резултат: bar: 123.5 var foobar = 1 + parseInt("2") + 3.50; console.log("foobar: " + foobar); Резултат: foobar: 6.5
  • 25. @leonanavi JavaScript Callback Hell fs.readdir(source, function(err, files) { if (err) { console.log('Error finding files: ' + err) } else { files.forEach(function(filename, fileIndex) { console.log(filename) gm(source + filename).size(function(err, values) { if (err) { console.log('Error identifying file size: ' + err) } else { console.log(filename + ' : ' + values) aspect = (values.width / values.height) widths.forEach(function(width, widthIndex) { height = Math.round(width / aspect) console.log('resizing ' + filename + 'to ' + height + 'x' + height) this.resize(width, height).write(destination + 'w' + width + '_' + filename, function(err) { if (err) console.log('Error writing file: ' + err) }) }.bind(this)) } }) }) } }) Идеи за избягване на: http://callbackhell.com/
  • 26. @leonanavi JavaScript полезни връзки  Mozilla Developer Network: JavaScript https://developer.mozilla.org/en-US/docs/Web/JavaScript  w3schools: JavaScript Tutorial http://www.w3schools.com/js/  Уеб дизайн, ФМИ към СУ http://www.fmi.uni-sofia.bg/econtent/web-design  ES6: The Good Parts, Борис Симандов, OpenFest 2014 https://www.youtube.com/watch?v=-CirKivxCwo  JavaScript основи - видео уроци, Telerik Academy http://academy.telerik.com/student-courses/web-design-and-ui/javascript-fundamentals/video
  • 28. @leonanavi Git  Система за контрол на версиите на кода  Децентрализирана  Open source  Създадена от Линус Торвалдс за кода на Linux kernel
  • 29. GitHub  Онлайн система, базирана на Git  Безплатни публични Git репота  Допълнителни услуги като bug tracking, wiki и други  Развива се и като социална мрежа за програмисти :)
  • 30. @leonanavi Основни Git команди  Сваляне локално на кода от Git репо с clone: git clone https://github.com/leon-anavi/html5-android-course  Сваляне на промени във вече съществуващо локално репо на проекти с pull: git pull  Смяна на Git клон (т.нар. branch) с checkout: git checkout foo  Отказ и изтриване на всички локални промени: git reset --hard HEAD
  • 31. @leonanavi Основни Git команди  Списък на променените файлове със status: git status  Преглеждане на промени по файл с diff: git diff foo.txt  Маркиране на файл за добавяне с add: git add bar.txt  Изтриване на файли с remove: git remove foobar.txt
  • 32. @leonanavi Основни Git команди  Запазване на промените с локалното репо с commit: git commit -m "Информация за промените"  Предаване на запазените промени от локалното репо към други репота със push: git push  Показване на хеш на текущия commit в репо: git rev-parse HEAD
  • 33. @leonanavi Упражнения  Регистрация в GitHub.  Създаване на репо с open source лиценз и README.  Напишете JavaScript функция, която изписва числата от 1 до 100. Всяко число, което се дели на 3 трябва да бъде заменено с Fizz. Всяко число, което се дели на 5 да се замени с Buzz. Всяко число, което се дели и на 3, и на 5, трябва да се занеми с FizzBuzz.  Публикувайте решението в GitHub.