JavaScript

Введение. Основы языка. github

Жигалов Сергей

Java

  • написать код
  • скомпилировать
  • упаковать в апплет
  • подключить

JavaScript

  • написать код
  • скомпилировать
  • упаковать в апплет
  • подключить
  • Синтаксис → C, C++, Java
  • Динамическая типизация → Perl
  • Ссылки на функции → Lisp
  • Наследование через прототипы → Self

Брэндон Айк

разработал JavaScript для Netscape 1995

Брэндон Айк

Брэндон Айк

... он должен был быть написан за 10 дней, а иначе мы бы имели что-то похуже JS...

Брэндон Айк

... В то время мы должны были двигаться очень быстро, т.к. знали, что Microsoft идет за нами...

Брэндон Айк

... JS был обязан «выглядеть как Java», только поменьше, быть эдаким младшим братом-простаком для Java...

JSON

JavaScript Object Notation

Дуглас Крокфорд, 2001

JSON


{
    "name": "Works",
    "cashlessPayment": true,
    "capacity": 3,
    "barista": [
        {
            "name": "Лёша",
            "favourite": "cappuccino"
        },
        {
            "name": "Лиза",
            "favourite": "tea"
        }
    ]
}
        

XML




    Works
    true
    3
    
        
            Лёша
            cappuccino
        
        
            Лиза
            tea
        
    

        

AJAX

(Asynchronous JavaScript and XML)

Джеймс Гаррет, 2005

Google maps 2005
node

NodeJS

  • Linux / Windows / MacOS /...
  • Единая архитектура
  • Один поток*
  • Node Package Manager
npm
Версия Год выпуска
node 0.4 2011
node 0.10 2013
iojs 1.0 2015
node 0.12 2015
iojs 3.0 2015
node 6.0 2016

JavaScript

  • Браузер
  • Сервер
  • Базы данных
MongoDB-Logo

Основы языка

Типы данных

Типы данных

  • числа
  • строки
  • булевые величины
  • объекты* и массивы*
  • функции*
  • неопределённые величины

Числовой


123     // 123
        

12.3    // 12.3
        

Числовой. Системы счисления


0x11    // 17
0b11    // 3
0o11    // 9
        

Числовой. Экспонента

64 бит


2^64 = 18446744073709552000
        

Number.MAX_SAFE_INTEGER
// 9007199254740991
        

2.998e8
// 2.998 × 10^8
// 299800000
        

Числовой. Бесконечность


Infinity
-Infinity
        

Infinity - 1 === Infinity // true
        

Числовой. Не число


NaN
        

0/0 // NaN
Infinity - Infinity // NaN
'один' / 'два' // NaN
        

Строковый


'строка текста'
"строка текста"
'中文 español русский \' '
        

Логический


true
false
    

Hеопределенное значение


undefined
null
    

var a;
console.log(a); // undefined
    

typeof


typeof 0;
// 'number'
    

typeof '0';
// 'string'
    

Основы языка

Переменные

Переменные


var studentsCount;
studentsCount = 98;
        

var studentsCount = 98;
        

var studentsCount = 98,
language = 'JavaScript';
        

Именование переменных

oneMoment
a-z _ $
1moment

Именование переменных

soSo
A-Z a-z 0-9 _ $
so-so

Именование переменных


// Переменная
var currentTime;
        

// Константа
var MILLISECONDS_IN_DAY;
        

Зарезервированные слова


break    do       try       while
case     else     new       with
catch    finally  return
continue for      switch
debugger function this
default  if       throw
delete   in       instanceof
typeof   var      void
        
https://clck.ru/9auhk

Зарезервированные слова


class enum   extends super
const export import
        
https://clck.ru/9auhk

Комментарии


// это короткий комментарий
        

/* а это длинный комментарий
написаный в несколько строк */
        

Комментарии


/* ах этот длинный комментарий ... */
var weather = 'cold';

console.log(weather); // cold
        

Комментарии


var weather = 'sunny';

/*/* ах этот длинный комментарий ... */
var weather = 'cold';*/

console.log(weather);
// SyntaxError: Unexpected token *
        

Основы языка

Операторы

Унарные

++ (инкремент)
-- (декремент)
-  (унарный минус)
!  (логическое НЕ)
        

Инкремент


var a = 1;
var b = a++;  // b === 1, a === 2
        

var a = 1;
var b = ++a;  // b === 2, a === 2
        

Бинарные

Арифметические

* (умножение)
/ (деление)
% (остаток от деления)
    
+ (сложение)
- (вычитание)
+ (сложение строк)
    

Сложение


2 + 3 = 5
    

'«JavaScript — это простой, но ' +
'изящный язык, который является ' +
'невероятно мощным для решения ' +
'многих задач» © Джон Резиг'
    

Сравнения

<  (меньше)
<= (меньше или равно)
>  (больше)
>= (больше или равно)
    
==  (проверка на равенство)
!=  (проверка на неравенство)
=== (проверка на идентичность)
!== (проверка на неидентичность)
    

Логические

&& (И)
|| (ИЛИ)

Присваиваивание

= (присваивание)
*=, /=, +=, -=, &=, ^=, |= 
(присваивание с операцией)

var a = 1;
a += 1;
a = a + 1;
    

Условные операторы


if (language === 'JavaScript') {
    likes = likes + 1;
} else {
    likes = likes - 1;
}
    

likes = language === 'JavaScript' ?
    likes + 1 :
    likes - 1;
    

Условные операторы


switch (language) {
    case 'JavaScript':
        likes++;
        break;
    case 'C++':
    case 'Java':
        break;
    default:
        likes--;
}
    

Statement


a = b * 2;
    

Expression


a = b * 2;

// 2 - это выражение литерала
// b - это выражение переменной
// b * 2 - это арифметическое выражение
// a = b * 2 - это выражение присвоения
    

;


function getTrue() {
    return true;
}

getTrue();    // true
    

;


function getTrue() {
    return
    true;
}

getTrue();    // undefined
    

Основы языка

Строгий режим

Строгий режим


'use strict';

// этот код будет работать
// по современному стандарту ES5
    

Спецификация

Пример запуска


console.log('Hello, world!');
    

В браузере


// Ctrl + Alt + J

console.log('Hello, world!');
    

https://nodejs.org

NodeJS


// index.js
console.log('Hello, world!');
    

$ node index.js
    

Редакторы кода

WebStorm

WebStorm

Лицензия для WebStorm

  1. завести JetBrains Account
  2. подтвердить статус студента:
    • при помощи карточки ISIC
    • при электронной почты университета (в домене .edu)
    • при помощи скана студенческого билета

Подать заявку можно здесь

0. Регистрация

Регистрируемся по ссылке http://github.com/join
Регистрация
Подтверждение почты
Подтверждение почты
Подтверждение почты
Подтверждение почты
Заполнение профиля
Заполнение профиля
Указываем ФИО и группу
Указываем ФИО и группу

1. Делаем Fork

Переходим по ссылке https://github.com/urfu-2016/demo-task-1
Переходим на демонстрационный таск
Нажимаем на кнопку Fork
Нажимаем на кнопку Fork
Редирект на форк
Редирект на форк
2. Устанавливаем git
Переходим на https://git-scm.com/download
Переходим на git-scm.com/download
2.1. Устанавливаем git Windows
Запускаем "Git.exe"
Запускаем Git.exe
Выбираем "Use Windows' defaults console"
Выбираем 'Use Windows' defaults console'
Открываем cmd. Готово к использованию
Готово
2.2. Устанавливаем git Ubuntu
Выполняем в консоли
$ apt-get install git
2.2. Устанавливаем git Mac OS
Выполняем в консоли
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install git
3. Решаем задачу
Нажимаем "Clone or Download"
Нажимаем 'Clone or Download'
Выполняем в консоли

# Клонируем репозиторий
git clone https://github.com/login/demo-task-1.git
        

# Решаем задачу в любимом редакторе
        






# Посмотреть список измененных файлов
git status
        
git status

git add math.js
git status
        
git status

# Правим код в любимом редакторе

git status
        
git status
Выполняем в консоли

# Клонируем репозиторий
git clone https://github.com/login/demo-task-1.git
        

# Решаем задачу в любимом редакторе
        

# Добавляем измененные файлы
git add math.js
        

# Фиксируем изменения
git commit -m 'Сложение двух чисел'
        



# Представляемся git
git config --global user.email "sergey@zhigalov.com"
git config --global user.name "Zhigalov Sergey"
        
Представиться  git
Выполняем в консоли

# Клонируем репозиторий
git clone https://github.com/login/demo-task-1.git
        

# Решаем задачу в любимом редакторе
        

# Добавляем измененные файлы
git add math.js
        

# Фиксируем изменения
git commit -m 'Сложение двух чисел'
        

# Публикуем изменения в удалённый репозиторий
git push origin master
        

# Вводим логин и пароль
Username for 'https://github.com': zhigalov-sergey
Password for 'https://zhigalov-sergey@github.com':
        
Авторизоваться в git

Caching your GitHub password

4. Отправляем решение на проверку

Выбираем "Pull Requests"
Выбираем вкладку 'Pull Requests'
Нажимаем "New pull request"
Нажимаем 'New pull request'
Нажимаем "Create pull request"
Нажимаем 'Create pull request'
Указываем фамилию и имя
Create pull request
Указываем фамилию и имя

5.1 Проверка Travis CI

Переходим в Travis CI
Переходим в Travis CI
Ищем строку с ошибкой
Ищем строку с ошибкой

5.2 Проверка Хрюнделем

PR проверки
Линтинг не пройден
Линтинг не пройден
Тесты не пройдены
Тесты не пройдены
Всё хорошо
Всё хорошо
Итог
Итог
Статусы
  • accepted - 1 балл
  • half-accepted - 0.5 балла
  • failed - 0 баллов
  • duplicate - 0 баллов

5.3 Проверка студентором/ментором

Комментарий на доработку
Комментарий на доработку
Успешный комментарий
Успешный комментарий
6. Доработка

# Правим код в любимом редакторе
        

# Добавляем все измененные файлы
git add math.js
        

# Фиксируем изменения
git commit -m "Добавил преобразование типов"
        

# Отправляем изменения в удалённый репозиторий
git push origin master
        

https://github.com/urfu-2016/guides

Регистрация

http://bit.ly/urfu2016reg

Домашнее задание

XXL