Категорія: CFML
Покращуючи CFScript
Шон Корфілд розповів про те, як відбувається еволюція CFScript. Він навів приклад того, як було втілено функції в різних серверах застосунків та роль CFML Advisory Commitee. Ми вже колись згадували про цю тему.
Що цікаво, я вже довгий час сповідую синтаксис, аналогічний до наведеного прикладу ColdBox: класичне визначення cffunction+cfargument, а тіло на cfscript.
Треба відмітити, що до широкого використання нового синтаксису ще далеченько, аж поки CF9 та Railo не займуть достатньо велику частину ринку. До того часу доведеться писати сумісний з CF8 код, щоб забезпечити собі спокійний тил.
CFML 101 - Помилки новачків (друга частина) та веселощі зі списками
Ерік Кобб продовжує (див. про першу частину) серію публікацій про основи CFML.
В другій публікації про помилки новачків він розповідає про особливості використання Application.cfm (рекомендується уважно переглянути коментарі, бо в цій частині є певні помилки), деякі можливості вкладання викликів функцій та необхідність використання cfparam.
В публікації Fun with Lists розповідається про переваги використання списків, котрі є вельми зручним та ефективним з точки зору швидкодії інструментмо.
Дискусія: чому CFML, а не Java?
Нещодавно Шон Корфілд (Sean Corfield) опублікував невеличку замітку, в якій критично висловився щодо компанії, котра витратила три роки (!) на переписування сайту з CFML на Java.
Обговорення тої самої новини на TechCrunch вилилося в значну дискусію за участі великої кількості авторитетних членів спільноти (навіть Бен Форта завітав!), частина якої перекинулася й на коментарі до посту Шона.
Зокрема, в них відмітився оборонець ідеї переписування (можливо, учасник) Девід Теннерсін (David Tannersyn), котрий викликав нову хвилю обговорення, що призвело до написання Шоном нової ґрунтовної публікації Why CFML? Why not Java?, котра має на меті розставити крапки над "і" в цій дискусії.
Рекомендую до ознайомлення, все доволі цікаво.
CFML 101 - Помилки новачків, частина 1
Ерік Кобб розпочав вельми корисну серію публікацій про типові помилки новачків в CFML, популярні питання та інші корисні речі.
Досвідчені розробники навряд чи знайдуть щось нове для себе, але для початківців дуже рекомендується до ознайомлення:
CFML 101 - Rookie Mistakes Part 1
В першій частині розповідається по символи фунтів (pounds, #), грамотне використання cfoutput, доцільність вказування області видимості змінних та небезпеки використання Evaluate.
Я проходив свого часу через усі вказані пункти, але завдяки ознайомленню з існуючими зразками гарного коду швидко позбувся цих звичок :)
На додаток, варто відмітити й знайдений читачами виняток з описаних правил, зокрема про доцільне використання Evaluate.
Запущено RailoAjax.org
Сьогодні сталася ще одна добра подія для спільноти.
Андреа Камполоньї (Andrea Campolonghi) повідомив у гугл-групі Railo про те, що вийшов на інтернет-орбіту RailoAjax.org. Як помітно з назви, проект призначено для втілення cfajaxproxy, cfdiv and та інших RIA-фішок.
За клієнтську взаємодію відповідає jQuery, за серверну, вочевидь, CFML.
Варто додати, що проєкт має вікі та трекер на базі Trac: docs.railoajax.org
Про деякі особливості Application.cfc
Не всі розробники задумуються над тим, що Application.cfc це не тільки Application, але й повноцінна CFC. Використання її саме у якості компоненти дає кілька цікавих можливостей.
Наприклад, розглянемо таку просту компоненту:
<cfcomponent output="false">
<cfset this.name = "application_introspect" />
<cfset this.foo = "bar" />
<cffunction name="onRequestStart" returnType="boolean" output="false">
<cfargument name="thePage" type="string" required="true">
<cfset application.thePage = arguments.thePage />
<cfreturn true />
</cffunction>
</cfcomponent>
А тепер спробуємо використати її.
<cfdump var="#Application#" >
<p> </p>
<cfset test = CreateObject("component", "Application") />
<!--- CF9 way
<cfset test= new Application() />
--->
<cfdump var="#test#">
<cfset test.onRequestStart("introspect.cfm") />
<p> </p>
<cfdump var="#Application#">
Таким нехитрим способом можна робити дві речі:
-
Подивитися що всередині об'єкту Application (на прикладі this.foo).
-
Зручно маніпулювати Application scope.
Результат роботи вищевказаного коду виглядатиме так:
Groups: OOP in ColdFusion
Нещодавно було створено Google групу для обговорення особливостей та доцільності взагалі (це окрема гаряча тема) об'єктно орієнтованого програмування в CFML.
Там вже встигли відмітитися чимало відомих членів спільноти.
Що характерно для цієї теми, більше половини обговорень присвячено теоретичним питанням.
Офіційна документація з ColdFusion 9 CFML
Поки не доступна з публічних сторінок підтримки.
За традицією, з дещо переробленим дизайном. З можливістю експорту в PDF.
Adobe ColdFusion 9 CFML Reference
Сайт №1 для CF-розробника.
Реалізація cfdump в інших мовах
Не секрет, що CF-програмісти обожнюють cfdump за його зручність та інформативність. Деякі люблять його настільки, що власноруч створюють клони теґу для інших мов. Зрештою, навіть я колись робив це на PHP, як модуль внутрішньої CMS компанії.
Тож варто поглянути на наступні реалізації:
- dBug для PHP від Kwaku Otchere;
- prettyPrint для JavaScript від James Padolsey.
Обидва виглядають доволі симпатично, хоча й не зрівняються з величчю CFML :)
Пропоновані зміни у визначенні функцій в CFScript
Нещодавно Шон Корфілд (Sean Corfield) опублікував замітку з циклу CFML Advisory, що пропонує ряд змін в синтаксисі в наступних версіях CFML (що стосуватиметься всіх серверів, що найприємніше).
Зокрема, при визначенні функції можна буде вказувати:
- access (public, private, package, remote)
- return type
- argument types
- default values
Наприклад, ось так:
public string function greet(string name, string greeting = "Hello") {
return greeting & " " & name;
}
Деякі речі можуть бути опущені:
function greet(name, greeting = "Hello") {
return greeting & " " & name;
}
Що аналогічне цьому:
public any function greet(any name, any greeting = "Hello") {
return greeting & " " & name;
}
Ну і обов'язкові агрументи, куди ж без них:
public string function greet(required string name, string greeting = "Hello") {
return greeting & " " & name;
}
Хтось резонно може зауважити, що це є черговий крок в сторону Java.
Ну й добре, аби було на користь розробникам, особливо любителям CFScript.