Некоторое время я задавался этим вопросом, но всегда так или иначе предпочитал табы, и для меня это было гораздо удобнее и универсальнее, чем пробелы, несмотря на все нюансы. Единого стандарта у пробельных отступов нет, и я часто встречал код отступом в 2, 4 и даже 3 пробела (в зависимости от эстетических предпочтений программиста). Я сразу выкладываю карты на стол: в данной статье я не собираюсь приводить доводы предпочитать что-то одно, совсем нет, напротив, эти два метода сочетаются, и ещё как! И ваш код отнюдь не будет разваливаться если был написан на табах отступом в 2 пробела и открыт в редактора с отступом табов хоть в 10 пробелов! Тут уже можно спокойно варьировать шириной таба под самые извращённые эстетические потребности.
Показаны сообщения с ярлыком javascript. Показать все сообщения
Показаны сообщения с ярлыком javascript. Показать все сообщения
четверг, 2 августа 2012 г.
четверг, 28 июня 2012 г.
Node.JS: Вышла новая версия шаблонизатора nJSt — v0.2
Native JavaScript Templaes v0.2, произошли следующие изменения:
- Теперь парсер возвращает не просто строку, а объект String, который в будущем может пополняться методами и свойствами. На данный момент содержится свойство status, которое может содержать строку "success" или "error", в зависимости от удачного или неудачного парсинга.
Внимание! При некоторых условиях могут возникнуть проблемы с обратной совместимостью, например: когда результат парсера возвращается в response HTTP-сервера. Для того, чтобы избежать проблем, следует добавлять к результату парсера метод .toString(), который преобразует его в обычную строку;
- Добавлена возможность создания множества экземпляров шаблонизатора, и у каждого могут быть свои уникальные настройки. Объект модуля шаблонизатора — это конструктор, но и этот же самый конструктор работает и как экземпляр самого себя, содержит те же методы и собственные настройки, что обеспечивает обратную совместимость (см. пример под номером №3);
- Теперь nJSt присутствует и в NPM:
npm install njst
- Некоторые другие изменения, не влияющие на API: шаблонизатор разбит на модули, код лучше задокументирован с стиле JSDoc и прочие исправления.
В будущем ещё предстоят изменения. Например планируется всё-таки добавить конструкции <% ... %> %{...} в замену конструкциям с символами решётки: <# ... #> #{...}, — но конструкции с символами решётки по прежнему будут поддерживаться ради сохранения обратной совместимости.
https://github.com/unclechu/njst
https://github.com/unclechu/njst
суббота, 17 сентября 2011 г.
JavaScript: Присвоить метод строке или числу
Как говорится: «век живи — век учись». Я тут (не без помощи форума nodejs.ru) узнал интересный факт. Много где говорится об эквивалентности создания новой строки таким способом:
И на закуску:
var str = 'Hello world';С таким:
var str = new String('Hello world');
Но на самом деле, — это даёт разные результаты. Если под рукой есть Firebug, — проверьте и убедитесь сами. А тут я хочу подметить по теме о присваивании метода к строке или числу, дальше думаю сами всё поймёте:var str = 'Hello world';
str.mthd = 123;
str; //Hello world
str.mthd; //undefined
var str2 = new String('Hello world');
str2.mthd = 123;
str2; //Hello world или объект String в отладчике {mthd: 123, 0: 'Hello world'}
str2.mthd; //123
Аналогично с new Number(), экспериментируйте!И на закуску:
(new String('Hello world') === 'Hello world') //false
(new String('Hello world') == 'Hello world') //true
Спасибо некоему AbS_!Внимание! Подводные камни!
Впоследствии практическим путём я наткнулся на подводные камни! В частности, когда я захотел вернуть в Node.JS ответ HTTP-сервера на запрос объектом строки:require('http').createServer(function (req, res) {
var str = new String('ok');
res.end(str);
}).listen(8000);
При обращении к http://127.0.0.1:8000 процесс ноды обваливался с ошибкой:TypeError: first argument must be a string or BufferЧтобы обойти проблему, — нужно дописывать к выводу строки вызов метода .toString(), — дабы преобразовать объект в обыкновенную строку, из строки-объекта:
res.end(str.toString());Штука тут в следующем:
typeof new String('check') //returns 'object'
typeof 'check' //returns 'string'
Так что, коли решились использовать строку как объект, будьте бдительны и осторожны!
пятница, 3 июня 2011 г.
Node.JS: Native JavaScript Templates (nJSt). Шаблонизатор, построенный на нативном JavaScript
Приветствую тебя, читатель. Гоняясь за идеей сделать шаблонизатор, основанный на нативном JavaScript — я кое к чему пришёл. В Node.JS для реализации этой задачи нашлось всё, что я мог пожелать, и выполнить задачу получилось настолько же нативными средствами. Например, главным инструментом послужил модуль VM для выполнения изолированного от внешней среды JavaScript-кода. Шаблонные вставки — это чистый JS, но туда не попадают всяческие опасные инструменты вроде скальпеля, require, global и др.
Перед тем как приступить к подробному разбору полётов, сразу взглянем на пример использования, который скорей нагляднее отразит суть, чем что-либо ещё. Код создания сервера приводить не буду, просто опишу сам шаблон и парсинг под определённым контекстом.
HTML-шабон:
Контекст:
Перед тем как приступить к подробному разбору полётов, сразу взглянем на пример использования, который скорей нагляднее отразит суть, чем что-либо ещё. Код создания сервера приводить не буду, просто опишу сам шаблон и парсинг под определённым контекстом.
HTML-шабон:
<html>
<head>
<title>#{PageTitle}</title>
</head>
<body>
<h1>#{PageTitle}</h1>
<ul>
<# for (var i=0; i<List.length; i++) { #>
<li>
<#
if (typeof List[i] !== 'object') {
show(List[i]);
} else {
show(List[i].name +' - '+ List[i].note);
}
#>
</li>
<# } #>
</ul>
</body>
</html>
Контекст:
var context = {
PageTitle: 'jJSt test',
List: ['First', {name:'Second', note:'2th'}, 'Third'],
};
var result = njst.parse(html, context, {debug:1});
пятница, 20 мая 2011 г.
Node.JS: Учимся создавать маленький парсер шаблонов
Приветствую тебя, читатель. Ещё давеча я даже не знал о существовании Node.js, но зато успел увесисто поработать с JavaScript, после которого так не хочется писать на чём-либо другом. Многие, кто вник в JS и его дзен, что всё есьм — объект, в замыкания, анонимные функции, предпочитают работать только с ним. Однажды с товарищем обменивались мыслями о PHP, покритиковали скудные и неудобные возможности ООП, и я тут выдал: «вот бы вместо PHP на серверной стороне писать на JS», — на что получил мгновенный ответ: «nodejs тебе в руки». Не долго думая я начал рыть по wiki и другим ресурсам, далее в кротчайший срок я поднял Ubuntu Server на Virtual Box и поставил туда сам Node.js.
Сразу предупреждаю, что если вы не работали с JavaScript или просто скудно с ним знакомы, начните именно с него, иначе Node.js может показаться вам тёмным лесом. Хочу познакомить вас с языком сразу на практике, и так же показать идею по опять же практическому применению. Я приведу пример реализации маленького парсера шаблонов, всё это уложится в 2-а небольших файла, нарочито без излишеств, чтобы наглядно и прозрачно посмотреть «как это работает».
Сразу предупреждаю, что если вы не работали с JavaScript или просто скудно с ним знакомы, начните именно с него, иначе Node.js может показаться вам тёмным лесом. Хочу познакомить вас с языком сразу на практике, и так же показать идею по опять же практическому применению. Я приведу пример реализации маленького парсера шаблонов, всё это уложится в 2-а небольших файла, нарочито без излишеств, чтобы наглядно и прозрачно посмотреть «как это работает».
Подписаться на:
Сообщения (Atom)