Как стать автором
Обновить

JavaScript — быстрый старт для Perl-разработчиков

Время на прочтение3 мин
Количество просмотров3.9K
Perl и JavaScript очень похожи.

Элементарное



Массивы и хэши JavaScript по своей записи почти идентичны ссылкам на массивы и ссылкам на хэши языка Perl. Единственное — в качестве разделителя => выступает разделитель :.

Сравните Perl
my $a = [ 1, 4, 67, { x => 67, y => 43} ];

и JavaScript
var $a = [ 1, 4, 67, { x: 67, y: 43} ];


Два важных отличия:
* Перечисление элементов хэша в JavaScript не должно завершаться запятой (это приведёт к ошибке). Для массива допустимо определение var a = [1,2,45,67,];
* Для переменных JavaScript нет понятия контекст и префикс. $ — это просто стандартный разрешённый символ для имени переменной. В рабочем коде знак $ лучше использовать только для обращения к соотв. функциям jQuery/Prototype.

Скалярные значения в JavaScript чуть более типизированы (численный, строковый и булевый типы разделены), но это скриптовый язык, и в переменной тоже может находится что угодно.

Важное замечание: Внутренний формат строк JavaScript- Unicode. Все встроенные функции эскапирования JavaScript знают только кодировку utf-8. Рекомендую для Ajax-взаимодействия, соответственно, выбирать только кодировку utf-8.

Функции в JavaScript и подпрограммы в Perl очень похожи. И те, и другие позволяют оперировать замыканиями. И те и другие — просто переменные, с возможностью альтернативной формы записи. Внутренняя функция оперирует переменными внешней функции.

Сравните Perl
my $f = sub
{
my ($a, $b) = @_;
return $a * $b;
};


и JavaScript
var $f = function($a, $b)
{
return $a * $b;
};


Небольшое отличие: при такой форме определения функции в JavaScript после закрывающей фигурной скобки точка с запятой не обязательна. Но я рекомендую всегда использовать именно такую форму определения функций, и включать точку с запятой (для корректной работы packer).

Важное отличие: В JavaScript функции, равно как и массивы, и хэши — являются частными случаями объектов. Все объекты JavaScript — фактически хэши. Запись a['b'] идентична записи a.b (доступен оператор проверки наличия ключа 'b' in a).

Пространства имён и классы



Пакеты Perl очень удобно поддерживаются в JavaScript через функции-пространства имён.
Perl:
package Something;

sub x
{
}


JavaScript:
window.Something = function()
{
var x = function()
{
};

};
window.Something.x = x; // экспорт имён


Объектная модель в JavaScript может быть поддержана множеством способов, в рамках семинара я рассказал лишь об одном из них — это формирование объекта функцией-конструктором.

После небольшого введения в jQuery был представлен и пример плагина:
(function() // анонимное пространство имён.
{
$.fn.helloWorldControl = function()
{
this.empty();
// Заметьте, мы формируем содержание и присваиваем его отдельной переменной.
// Теперь мы сможем им манипулировать, когда орган управления станет более
// функциональным.
var div = $('Hello, world').appendTo(this);
};
})();


Используем:
$('#example').helloWorldControl();


Регулярные выражения



Хорошая новость — регулярные выражения поддерживаются языком JavaScript. Плохая новость — использовать их немного сложнее.
Perl:
if ($v =~ m/$began/i)
{
}


JavaScript:
if (v.match(/$began/i))
{
}


Perl:
$v =~ s/$began/begin/i;


JavaScript:
v.replace(/$began/i, 'begin');


Один из читателей вспомнил замечательную статью Дмитрия Котерова: Маленькие хитрости JavaScript, или пишем скрипты по-новому.

Ещё рекомендую RSDN: введение в jQuery.

P.S.:
В следующей статье постараюсь рассказать о лёгком и удобном RPC между JavaScript и PHP/Perl и .NET.

P.P.S.:
Так получилось, что в своей компании я являюсь носителем знаний в основном по технологиям клиентской стороны (DHTML, JavaScript, jQuery, Ajax), в то же время обладая некоторыми базовыми навыками по Perl.

Тем не менее, знание клиентских технологий сейчас очень важны для большинства Perl-программистов, которые ранее использовали просто генерацию страниц по шаблонам.

В результате чего и родилась эта статья (первоначально — семинар).
Теги:
Хабы:
Всего голосов 73: ↑49 и ↓24+25
Комментарии80

Публикации

Ближайшие события