Pull to refresh

Sugar — подслащённый Javascript

Reading time6 min
Views5.4K
Что же такое Sugar?
Это javascript-библиотека для работы со встроенными объектами javascript, которая:
  • расширяет встроенные объекты языка, добавляя полезные и интуитивно-понятные методы;
  • добавляет кросс-браузерную функциональность, где она сломана или ее нет;
  • полностью покрыта тестами;
  • легко взаимодействует с другими фреймоворками и сторонним кодом;
  • проста в понимании и использовании

В качестве примера использования, автор приводит вот такой код:
getLatestTweets(function(t) {
    var users = t.map('user').unique();
    var total = users.sum('statuses_count').format();
    var top = users.max('followers_count').first();
    var count = top.followers_count.format();
    var since = Date.create(top.created_at);
    return users.length + ' users with a total of ' + total + ' tweets.\n' +
    top.screen_name + ' is the top with ' + count + ' followers\n' +
    'and started tweeting ' + since.relative() + '.';
});


Не правда ли, код читается почти как английский текст.
Самые нетерпеливые могут изучить предоставляемые функции по этой ссылке, а остальных ждёт краткое описание под катом.

Массивы


Sugar исправляет поддержку стандартных методов Javascript 1.6, таких как indexOf, forEach, reduce и др. Методы доработаны, чтобы принимать типы аргументов, которые стандартные функции не поддерживают: вложенные объекты, регулярные выражения, строки. При возможности будут использоваться нативные методы браузера. Полный список методов.
    ['a','b','c'].indexOf('c'); > 2
    [{ foo:'bar' }, { moo:'car' }].indexOf({ moo: 'car' }); > 1
    ['rocksteady','and','bebop'].map('length'); > [10,3,5]
    ['rocksteady','and','bebop'].sortBy('length'); > ["and","bebop","rocksteady"]
    ['rocksteady','and','bebop'].findAll(/o/); > ["rocksteady","bebop"]
    ['rocksteady','and','bebop'].first(1); > ["rocksteady"]
    ['rocksteady','and','bebop'].from(1); > ["and","bebop"]
    ['three','two','one'].groupBy('length'); > {"5":["three"],"3":["two","one"]}
    [1,65,2,77,34].average(); > 35.8
    [1,2].add([2,3]); > [1,2,2,3]
    [1,2].subtract([2,3]); > [1]
    [1,2].intersect([2,3]); > [2]
    [1,2].union([2,3]); > [1,2,3]


Строки


Sugar исправляет кросс-браузерные различия при использовании split с регулярными выражениями. Языковая поддержка улучшена добавлением методов, поддерживающих юникод и китайский, японский, греческий, иврит. Такие методы как each, words, lines, paragraphs были добавлены для гибкой работой с текстом. Полный список методов.
'abcdefgh'.split(/[bdf]/); > ["a","c","e","gh"]
    'こんにちは'.hasHiragana(); > true
    '환영 합니다'.hasHangul(); > true
    'Добро пожаловать!'.hasCyrillic(); > true
    'welcome'.pad(1, ' ').pad(3, '-'); > "--- welcome ---"
    'hut!'.repeat(3); > "hut!hut!hut!"
    'off with her head!'.words(); > ["off","with","her","head!"]
    'off with her head!'.each(/he.+?\b/g); > ["her","head"]
    'off with her head!'.startsWith(/[a-z]ff/); > true
    'off with her head!'.first(3); > "off"
    'off with her head!'.from(3); > " with her head!"


Числа


Основные методы объекта Math доступны в Sugar в качестве шорткатов. Дополнительные плюшки — это округление с необходимой точностью, выравнивание чисел и их форматирование. В Sugar также есть методы, которые связывают числа в датами для легкой конвертации одноих в другие. Полный список методов.
    (125.425).round(2); > 125.43
    (125.425).round(-2); > 100
    (4235000).format(); > "4,235,000"
    (50).pad(5); > "00050"
    (23).ordinalize(); > "23rd"
    (5).upto(10); > [5,6,7,8,9,10]
    (5).daysAfter('Wednesday'); > "Monday, August 8, 2011 00:00"
    (5).yearsBefore('2001'); > "Monday, January 1, 1996 00:00"
    (5).times(function() {
    /* Run 5 times */
    })



Даты


Sugar добавляет к датам метод Date.create, который понимает даты в различных форматах (к сожалению дд.мм.гггг не понимает) — текстовых, относительых, абсолютных, timestamp'ы. Даты можно выводить в различных форматах с помощью простого синтаксиса. С помощью метода is, который понимает все форматы ввода дат, можно производить сложные сравнения. Полный список методов.
    Date.create('June 15, 2002'); > "Saturday, June 15, 2002 00:00"
    Date.create('2002-06-15'); > "Saturday, June 15, 2002 00:00"
    Date.create('2002/06/15'); > "Saturday, June 15, 2002 00:00"
    Date.create('15 June, 2002'); > "Saturday, June 15, 2002 00:00"
    Date.create('today'); > "Monday, August 1, 2011 00:00"
    Date.create('2 days ago'); > "Saturday, July 30, 2011 20:26"
    Date.create(888888888899); > "Tuesday, March 3, 1998 04:34"
    Date.create('the 15th of last month'); > "Friday, July 15, 2011 00:00"
    Date.create('the first day of 1998'); > "Thursday, January 1, 1998 00:00"
    Date.create().format('{12hr}:{mm} {tt} on {Weekday}'); > "8:26 pm on Monday"
    Date.create('3200 seconds ago').relative(); > "53 minutes ago"
    Date.create().iso(); > "2011-08-01T16:26:20.122Z"
    Date.create().isAfter('May 25');> true
    Date.create().is('tuesday'); > false
    Date.create().is('July'); > false
    Date.create().is('the 7th of June'); > false
    Date.create().addDays(2); > "Wednesday, August 3, 2011 20:26"
    Date.create().addMonths(2); > "Saturday, October 1, 2011 20:26"
    Date.create().addYears(2); > "Thursday, August 1, 2013 20:26"



Объекты


Хотя Sugar прямо и не взаимодействует с Object.prototype, библиотека обеспечивает несколько шортактов для доступа к метода класса Object. Один из них — это Object.extended, который создает объект-хеш, у которого есть методы, аналогичные доступным в других языках. Также добавляются методы проверки типа, такие как isString, isFunction и др. Полный список методов.
    Object.extended({ broken: 'wear' }).keys(); > ["broken"]
    Object.extended({ broken: 'wear' }).values(); > ["wear"]
    Object.keys({ broken: 'wear' }); > ["broken"]
    Object.clone({ broken: 'wear' }); > {"broken":"wear"}
    Object.isString('yes, it is'); > true
    Object.isFunction(function() {}); > true



Функции


В Sugar есть основные методы, такие как bind, который позволяет определить область видимости функции. Также есть методы delay, defer и Function.lazy, который позволяет создавать замыкания для вычислений, создающих большую нагрузку на CPU. Полный список методов.
    (function(a) {
    /* this = 'wasabi', a = 'bobby' */
    }).bind('wasabi', 'bobby')();
    (function() {
    /* delayed 500ms */
    }).delay(500);
    [1,2,3].each(Function.lazy(function() {
    /* Each iteration will occur 5ms after the previous one */
    }, 5));


* This source code was highlighted with Source Code Highlighter.

Полезные ссылки:
Tags:
Hubs:
Total votes 78: ↑66 and ↓12+54
Comments30

Articles