This is an updated version* of a presentation devoted to Scala programming language, its perks and disadvantages, elegant solutions and hidden traps.
This presentation by Dmytro Mantula (Lead Software Engineer, GlobalLogic) was delivered at Java Day Lviv on June 14, 2015.
* The first version of the presentation (in Russian) can be found here: http://www.slideshare.net/GlobalLogicUkraine/ss-48746051
More details: http://globallogic.com.ua/java_day_lviv_2015_presentations
This is an updated version* of a presentation devoted to Scala programming language, its perks and disadvantages, elegant solutions and hidden traps.
This presentation by Dmytro Mantula (Lead Software Engineer, GlobalLogic) was delivered at Java Day Lviv on June 14, 2015.
* The first version of the presentation (in Russian) can be found here: http://www.slideshare.net/GlobalLogicUkraine/ss-48746051
More details: http://globallogic.com.ua/java_day_lviv_2015_presentations
This is a simple profile of DSA Phototech - a light box sign manufacturer & supplier in California, US. The company has been growing stably since 1975 and now its clients covers countries all over the Americas.
http://lightboxes.com
This is a simple profile of DSA Phototech - a light box sign manufacturer & supplier in California, US. The company has been growing stably since 1975 and now its clients covers countries all over the Americas.
http://lightboxes.com
2. Для чого використовують JavaScript?
• Для попередньої перевірки введених
користувачем даних;
• Для додавання інтерактивності до веб-
сторінок:
– складні контроли (DOM, events);
– AJAX;
– реклама, спам;
5. JavaScript
Mocha
LiveScript
JScript – Microsoft (та ж сама історія що і з J++)
ECMAScript
JavaScript. Слово Java в назві мови не
має нічого спільного з мовою Java від Sun
Sun Netscape
Hot Java (95)
6. Bad Parts
Мова містить “погані конструкції”, використання
яких може перетворити читання чужого коду в
справжній жах. Деякі з них ви просто змушені
використовувати, напр. оператор +
• Microsoft and
7. Bad first implementations
• Перші реалізації мови JavaScript містили купу помилок
• Додайте до цього незліченні баги в прадавніх бравзерах, і
ви зрозумієте за що так зненавиділи JavaScript
8. For newbie and for guru
JavaScript одночасно є
дуже простою та дуже складною
9. Не Java та не C#
• Не має компілятора;
• Не має строгої типізації;
• Не має поняття “клас” (тип);
• Не має класичного наслідування;
• Не має virtual чи abstract методів;
• Не має overloading методів;
…
10. JavaScript: ключові ідеї
• “Є текст програми – виконуємо його”;
• Нестрога типізація;
• Об’єкти – динамічні контейнери;
• Прототиповане наслідування;
• Лямбда (lambda) [функції як об'єкти першого рівня];
• Зв’язування через глобальні змінні;
global
13. Базові типи
Примітивні типи даних
var i = 0; // number
var s = "Hello, world"; // string
var locked = false; // boolean
var data = new Object(); // object
var f = function() { return 1; } // function
Спеціальні “значення”
null
undefined
15. Numbers
• Єдиний числовий тип
– Нема int, long, byte і т.д.
• Number - 64-бітне число з плаваючою
крапкою (double)
• Number “хворіє” тими ж проблемами, що і
double в C++, C# чи Java:
0.1 + 0.2 == 0.30000000000000004
• for (i = 0; i < 10; i++) {} - OK
16. NaN
• NaN – Not a Number
• Результат помилкової арифметичної операції
<script type="text/javascript">
alert(typeof 1); // number
alert(typeof NaN); // number (!)
alert(5 - "four"); // NaN
alert(NaN == NaN); // false (!)
alert(isNaN(5 - "four")); // true
</script>
17. String
• Стрічка є послідовністю 16-ти бітних символів;
• Немає окремого символьного типу (char);
– Символ “емулюється” стрічкою з довжиною 1;
• Стрічки незмінні (immutable);
• Стрічковий літерал можна записати з
використанням як одинарних так і подвійних
лапок;
var s = "Hello " + 'world';
var o = s.charAt(4); // "o"
var alphasCount = s.length; // 11
19. null
• null – порожнє значення
var s = "something";
alert(typeof s); // string
s = null;
alert(typeof s); // object
20. undefined
• undefined – значення, якого нема
• Це спеціальне значення дуже часто викликає
конфуз.
var s;
alert(s); // undefined
var point = new Object();
alert(point.L); // undefined
point.L = undefined;
alert(point.L); // undefined
21. Only objects, no classes
Всі об’єкти по своїй структурі є хеш таблицями
Dictionary<string, object>
JavaScript не має лінкера, «зв’язування» об’єктів
відбувається через спільний глобальний об’єкт
- window
Всі глобальні
об’єкти є
властивостями
об’єкта window
22. Object as Hashtable
<script type="text/javascript">
var map = new Object();
map["key1"] = "JavaScript";
map["key2"] = 10;
map["key3"] = true;
var point = new Object();
point["X"] = 3;
point['Y'] = -5;
alert(map['key2'] + point['X']);
</script>
24. point.X || point["X"]
var point = new Object();
point["X"] = 3;
point.X = 3;
(!!!) наведені конструкції – еквівалентні
25. Коли доцільно використовувати
point["X"] нотацію
– коли об'єкт створюється з метою "бути хеш-
таблицею";
– коли не відомо наперед ім'я властивості:
var propName = prompt(
"Введіть ім'я властивості");
alert(point[propName]);
– коли ім'я властивості містить недозволені символи:
var person = new Object();
person["first name"] = "Ivanov";
person["-"] = true;
person["if"] = 1234567;
27. Арифметичні оператори, коментарі
• Такі ж як в C++/C#/Java
• так, є ++, -- та ?:
• // однорядковий коментар
• /* багаторядковий
коментар */
WARNING: operator +
var x = 1, y = 2;
alert(x + y + "$");
alert("£" + x + y);
28. Функції, як об'єкти першого рівня
• functions are first class objects
Дуже просте пояснення: з функціями можна
робити все те саме, що із звичайними
значеннями інших JavaScript типів (string,
object, number, boolean)
var f = "тут буде функція";
f = function() { };
var g = f;
alert(f == g); // об'єкт за посиланням
29. f()
<script type="text/javascript">
var sum = function(a, b) {
return a + b;
}
window["a - b"] = function(a, b) {
return a - b;
}
var result1 = sum(3, 2);
var result2 = window["a - b"](3, 2);
result = window["sum"](3, 2);
</script>
30. function f() {}
vs
var f = function () {}
<script type="text/javascript">
alert(sum(2, 2));
alert(diff(2, 2));
var sum = function(a, b) {
return a + b;
}
function diff(a, b) {
return a - b;
}
</script>
31. Оголошення функції, що потрібно
пам’ятати
function foo() {};
var foo = function foo() {};
var foo = undefined;
foo = function foo() {};