HTML5 [1]
CSS3 [1]
JavaScript [3]
JS in HTML5 [4]
Canvas (Context2D) [1]
Canvas (WebGL) [0]
Browser Technologies [2]
jQuery [1]
ExtJS [0]
Prototype.js [2]
SVG [2]
Browsers [2]
Mozilla Plugins [0]
XUL, Jetpack, etc.
Web [2]
MeowW [4]
iOS [0]
Алгоритмы [0]
Криптография [0]
Теория игр [0]
Теория вероятностей [0]
Математика [1]
Мат. анализ [0]
Алгебра [0]
Дискретная математика [0]
Теория графов [0]
Комбинаторика [0]
Теория чисел [0]
Комплексный анализ [0]
Матлогика [0]
Математическая логика, её связь с теорией алгоритмов и т.п.
Тензоры [0]
Геометрия [0]
Топология [0]
Дифференциальная геометрия [0]
Дифференциальные уравнения [0]
29 Сентябрь 2011 в 07:48:09
17:18:58
CoffeeScript - JavaScript в стиле Ruby, часть 1

Совсем недавно появившийся CoffeeScript уже получил довольно большую известность. Дело в том, что он позволяет писать на JavaScript с более простым и удобным синтаксисом. Относительно удобным :). По сути, CoffeeScript - это JavaScript в стиле Ruby. Немного непривычно, но быстро привыкаешь и уже начинаешь считать его удобным.

Как это работает?

Теперь логичный вопрос: как это работает? Ведь браузер не поддерживает CoffeeScript? На самом деле всё очень просто. Код на CoffeeScript транслируется в JavaScript-код. Вариант 1: мы используем CoffeeScript в Node.js. В таком случае нам надо воспользоваться менеджером пакетов ноды и установить в неё Coffee.

Code
npm install -g coffee-script

Кстати, файлы CoffeeScript имеют расширение .coffee. Можно также установить компилятор в качестве программы (написан на Ruby); но давайте не будем рассматривать этот вариант. Лучше вот вам второй - зайти на официальный сайт (http://jashkenas.github.com/coffee-script/), найти в меню ссылку "Try CoffeeScript", кликнуть... И получаем консольку, куда можно вводить код на CoffeeScript - а он динамически (можно даже на компьютер страницу сохранить, всё будет работать), в режиме реального времени будет компилироваться в JavaScript. Причём мы сразу увидим и код, и сможем его сразу запустить.

Ну и ещё один интересный вариант - интерпретировать CoffeeScript прямо на странице. Да, возможно и такое. Просто качаем скрипт отсюда: http://jashkenas.github.com/coffee-script/extras/coffee-script.js. Затем начинаем использовать:

Code
<script src="coffee-script.js"></script>  <script type="text/coffeescript">  a = 10  b = 20  </script>

Переменные

Ну что, пожалуй, начнём? А начнём мы с описания переменных.

Code
a = 10 # комментарий  b = true

На что мы тут обратим внимание? Во-первых, мы опускаем ключевое слово var - его ставить не нужно. Во-вторых, комментарии делаются знаком # - комменты с помощью // не работают, они интерпретируются как регулярки. Впрочем, работают многострочные /* */ комменты. В-третьих, мы не ставим ';' в конце строки - это не обязательно. Такой код компилируется в такой:

Code
var a, b;  a = 10;  b = true;

Отчётливо видно, что много излишнего кода, это вообще можно было записать в одну строку. Ну да ладно.

Функции

Синтаксис функций совсем уж непривычен - но удобен.

Code
a = ->    document

Чтобы сразу было всё понятно:

Code
var a;  a = function() {   return document;  };

Что здесь нового? Оператор -> для обозначения функции, все строки с отступом - тело функции. Из функции возвращается значение последней операции. Теперь передадим параметры:

Code
a = (x) -> x * x

Здесь я написал функцию в одну строку. Один параметр x, возвращаем x в квадрате.

Code
var a;  a = function(x) {   return x * x;  };

Пустую функцию создать совсем просто: a = ->. Из Ruby пришли очень интересные вещи. Например - указание параметров по умолчанию.

Code
x = (a, b = 10) -> a + b

Теперь - если мы не передадим параметром b - он получит значение 10. JS:

Code
var x;  x = function(a, b) {   if (b == null) {   b = 10;   }   return a + b;  };

Есть ещё одна очень интересная штука:

Code
x = (a, b...) -> b[a]

Это немного сложно для понимания, поэтому поясню: x(0, 1, 2, 3, 4). Здесь в переменную a упадёт значение 0; в b - массив из [1, 2, 3, 4].

Code
var x;  var __slice = Array.prototype.slice;  x = function() {   var a, b;   a = arguments[0], b = 2 <= arguments.length ? __slice.call(arguments, 1) : [];   return b[a];  };

Ещё забыл. Как передать в функцию другую функцию? Ну, кроме имени?

Code
x -> document
Code
x(function() {   return document;  });

"Литералы"

Есть ещё одна интересная штука. Выглядит примерно так:

Code
a = 10  b = "abc #{ a } dce"

Компилится:

Code
var a, b;  a = 10;  b = "abc " + a + " dce";

Обратите внимание, что кавычки обязательно двойные - при одинарных это не работает.

Массивы, объекты

Массивы в CoffeeScript выглядят также, как и в JS:

Code
a = [1, 2, 3, 4, 5]

Что не скажешь о хешах. В них можно опустить фигурные скобки:

Code
abc =    a:10,   b:20

Не забываем ставить пробелы. В Python и Ruby без них никак.

Оставим на будущее?

Давайте пока остановимся и оставим на будущее остальное? В CoffeeScript ещё найдётся, чего поизучать - условия и циклы, разные операторы, диапазоны... Ну и ООП - классы и наследование.

Просмотров: 6259 | | Теги: python, Ruby, coffeescript
Всего комментариев: 10
1 Master (19 Октябрь 2011 17:11:53) 0  
JS для Руби-программистов). Вряд человеку, привыкшему к javascript будет удобно. dry
Спам
2 CurtisgroUg (23 Июнь 2017 08:35:54) 0  
Последние женские новости здесь http://logwoman.ru/ - logwoman.ru
Спам
3 SandycoN (23 Сентябрь 2017 17:46:18) 0  
http://www.copic-sketch.ru - скетчи на заказ
Спам
4 Traceeo (27 Сентябрь 2017 09:34:35) 0  
http://bit.ly/2aKk97Z - push что значит

https://www.youtube.com/watch?v....nvkYebZ

http://yongbaeseok.com/index.p....=156241
Спам
5 PaulaSor (02 Октябрь 2017 13:44:49) 0  
Пополение баланса Авито (Avito) за 50% | Телеграмм @a1garant

Приветствую вас, дорогие друзья!

Рады предоставить Всем вам услуги по пополнению баланса на действующие активные аккаунты Avito (а также, совершенно новые). Если Вам необходимы конкретные балансы - пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

Аккаунты не Брут. Живут долго.

Процент пополнения в нашу сторону и стоимость готовых аккаунтов: 50% от баланса на аккаунте.
Если нужен залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
Для постоянных заказчиков гибкая система бонусов и скидок!

Гарантия:

И, конечно же ничто не укрепляет доверие, как - Постоплата!!! Вперед денег не просим...

Рады сотрудничеству!

Заливы на балансы Авито
________

как отвязать номер от аккаунта авито если забыл пароль и логин
развод на деньги на авито с карточкой
как сменить номер в аккаунте авито
почему авито пишет номер подтвержден в аккаунте
на авито просят номер карты чтоб перевести деньги
Спам
6 classoml (05 Октябрь 2017 13:37:31) 0  
lineage classic


Lineage 2 Classic 2.5 zaken saviors l2 europa club zelve
http://l2classica.com/ 24117236

lineage
lineage 2 classic
lineage 2 high five
lineage 2 interlude сервера
Спам
7 classicml (05 Октябрь 2017 13:52:42) 0  
сервера lineage



Lineage 2 Classic 2.5 zaken saviors l2 europa club zelve
http://l2classica.com/ 15146015



lineage 2 квесты
lineage 2 interlude сервера
Спам
8 ErnestGrofe (06 Октябрь 2017 00:08:43) 0  
http://wiliw.ru - заказ кондиционеров
Спам
9 RyptodIntib (16 Октябрь 2017 05:48:31) 0  
https://vk.com/cryptodrom - Биткоин на Украине
Спам
10 StevenTuG (16 Октябрь 2017 21:20:39) 0  
Addicted To Sock Knitting http://www.addictedtosockknitting.com/ - More info!..
Спам
Имя *:
Email:
Код *: