Tag lawan Skrip dalam CFML
Bandingkan tag vs script syntax dalam CFML/Lucee: nilai atribut tanpa petikan, function vs migration syntax, bila pilih yang mana, contoh tukar tag ke skrip.

Kandungan
- Tag lawan Skrip dalam CFML
- Dua Cara Menulis CFML
- Sintaks Tag: Menyatu dengan HTML
- Sintaks Skrip: Padat untuk Logik
- Dua Bentuk Tag dalam Skrip
- Perbezaan Nilai Atribut Tanpa Petikan
- Bila Pilih Tag, Bila Pilih Skrip
- Mencampurkan Kedua-duanya dalam Satu Fail
- Gaya yang Lebih Mudah Diselenggara untuk Pasukan
- Contoh Penukaran dari Tag ke Skrip
- Soalan Lazim (FAQ)
- Sumber
Tag lawan Skrip dalam CFML
Penulis: Thalhah · Tarikh: 16 Oktober 2026
CFML ialah satu daripada sedikit bahasa yang menyokong dua sintaks serentak: sintaks tag yang menyatu dengan HTML, dan sintaks skrip yang menyerupai JavaScript. Memahami kedua-duanya dan perbezaan halus di antara keduanya membolehkan anda memilih alat yang paling sesuai untuk setiap situasi. Artikel ini membandingkan kedua-dua gaya, menunjukkan cara mencampurkannya, dan memberi contoh penukaran dari tag ke skrip.
Dua Cara Menulis CFML
CFML bermula sebagai bahasa berasaskan tag sepenuhnya, dan dari semasa ke semasa sokongan untuk skrip berkembang. Hari ini hampir semua fungsi yang ada pada tag juga tersedia dalam skrip, termasuk keupayaan memanggil tag secara terus dalam blok skrip. Untuk pengenalan kepada bahasa itu sendiri, baca apa itu Lucee dan CFML.
Dua sintaks ini bukan bahasa berbeza, sebaliknya dua permukaan bagi bahasa yang sama. Kod yang sama boleh ditulis dalam salah satu gaya, dan Lucee menterjemahkannya kepada tingkah laku yang setara.
Sintaks Tag: Menyatu dengan HTML
Sintaks tag menggunakan tag bermula dengan cf dan kelihatan seperti HTML. Ia sangat mudah dibaca dalam konteks templat kerana anda boleh menyelitkan output terus di antara markup.
<cfquery name="q" datasource="mydb">
SELECT * FROM users
</cfquery>
<cfloop query="q">
<cfoutput>#q.name#</cfoutput>
</cfloop>
Gaya ini sesuai untuk halaman paparan yang banyak HTML, dan ia mudah difahami oleh pereka atau pembangun yang tidak mendalami logik. Untuk melihat pertanyaan pangkalan data dalam gaya tag, baca panduan cfquery dan cfqueryparam.
Sintaks Skrip: Padat untuk Logik
Sintaks skrip menyerupai JavaScript dan lebih padat untuk logik perniagaan. Ia menggunakan var, titik bertindih bagi blok, dan kurungan untuk pemanggilan fungsi.
var q = queryExecute(
sql = "SELECT * FROM users",
options = { datasource = "mydb" }
);
for (var row in q) {
writeOutput(row.name);
}
Gaya skrip menjadi pilihan moden untuk komponen (CFC) dan logik yang perlu diuji atau disusun secara modular. Baca panduan fungsi dan komponen CFC untuk perincian.
Dua Bentuk Tag dalam Skrip
Lucee menyokong dua cara menulis tag di dalam blok skrip, hasil daripada sejarah Jawatankuasa Penasihat CFML yang melibatkan Railo (kini Lucee), Adobe dan BlueDragon. Jawatankuasa itu bersetuju dengan satu sintaks, tetapi Adobe kemudian memilih sintaks berbeza, jadi Lucee menyokong kedua-duanya.
Bentuk pertama ialah sintaks fungsi (function syntax), yang menyerupai pemanggilan fungsi biasa:
cfsetting(requestTimeout = "10");
cfloop(from = 1, to = max, index = "i") {
writeOutput(i);
}
Bentuk kedua ialah sintaks migrasi (migration syntax), yang direka supaya kurang menyerupai fungsi dan memudahkan migrasi kod tag lama:
setting requestTimeout = "10";
loop from = 1 to = max index = "i" {
writeOutput(i);
}
Sintaks fungsi ialah bentuk yang disyorkan, manakala sintaks migrasi berguna ketika menukar kod tag secara mekanikal.
Satu pengecualian wujud untuk sintaks migrasi. Tag yang berkongsi nama dengan kata kunci skrip sedia ada, iaitu throw, return dan abort, tidak boleh ditulis dalam bentuk migrasi kerana ia bercanggah dengan kata kunci bahasa. Untuk tag ini, gunakan sintaks fungsi, contohnya cfthrow(message = "Ralat"), atau pernyataan skrip biasa seperti throw "Ralat".
Perbezaan Nilai Atribut Tanpa Petikan
Ini ialah perbezaan paling kerap menyebabkan pepijat halus. Dalam sintaks tag, nilai atribut tanpa petikan sentiasa dianggap rentetan, sama seperti ia ditulis dalam petikan. Ia tidak pernah dinilai sebagai nombor atau pemboleh ubah. Dalam sintaks skrip, nilai tanpa petikan ialah ungkapan, jadi nombor ialah nombor dan nama merujuk kepada pemboleh ubah.
<cfset susi = 42>
<cfinvokeargument name="tNum" value=1234> <!--- rentetan "1234" --->
<cfinvokeargument name="tNum" value=susi> <!--- rentetan "susi", bukan pemboleh ubah --->
Untuk menghantar pemboleh ubah dalam tag, anda perlu membungkusnya dengan #:
<cfinvokeargument name="tNum" value="#susi#"> <!--- pemboleh ubah susi, iaitu 42 --->
Jadual berikut meringkaskan tafsiran nilai dalam kedua-dua gaya:
| Kod | Sintaks tag | Sintaks skrip |
|---|---|---|
value="1234" | rentetan "1234" | rentetan "1234" |
value=1234 | rentetan "1234" | nombor 1234 |
value=susi | rentetan "susi" | pemboleh ubah susi |
value="#susi#" | pemboleh ubah susi | pemboleh ubah susi |
Apabila anda menukar kod tag ke skrip, semak setiap nilai atribut tanpa petikan, kerana value=1234 dan value=susi akan membawa maksud yang berbeza.
Bila Pilih Tag, Bila Pilih Skrip
Tiada jawapan mutlak, tetapi garis panduan berikut membantu. Pilih sintaks tag apabila anda menulis templat paparan yang banyak HTML, atau apabila kod akan dibaca oleh orang yang bukan pengatur cara. Pilih sintaks skrip untuk logik perniagaan, komponen, dan kod yang kompleks atau modular, kerana ia lebih padat dan konsisten dengan gaya bahasa moden.
Kebanyakan pasukan moden cenderung menggunakan skrip untuk logik dan tag untuk paparan, satu pemisahan yang menjadikan setiap bahagian lebih mudah dibaca dalam konteksnya.
Mencampurkan Kedua-duanya dalam Satu Fail
Kedua-dua gaya boleh wujud dalam fail yang sama. Anda boleh menggunakan blok cfscript untuk logik, kemudian keluar semula ke tag untuk paparan:
<cfscript>
var q = queryExecute(
sql = "SELECT name FROM users ORDER BY name",
options = { datasource = "mydb" }
);
</cfscript>
<cfoutput query="q">
#q.name#<br>
</cfoutput>
Campuran ini ialah corak yang sangat biasa dalam aplikasi CFML lama yang sedang dimodenkan. Untuk memahami gelung dan struktur kawalan dalam kedua-dua gaya, baca panduan gelung dan kondisional.
Gaya yang Lebih Mudah Diselenggara untuk Pasukan
Untuk pasukan, konsistensi lebih penting daripada gaya yang dipilih. Tetapkan satu peraturan yang jelas, contohnya skrip untuk CFC dan tag untuk paparan, dan patuhinya di seluruh projek. Ini memudahkan semakan kod dan mengurangkan perbalahan gaya.
Sintaks skrip biasanya lebih mudah diselenggara untuk logik kerana ia menyokong ciri seperti pengisytiharan jenis, closure, dan struktur kawalan moden secara langsung. Tag pula kekal unggul untuk templat kerana ia menyatu secara semula jadi dengan HTML. Elakkan mencampurkan kedua-dua gaya tanpa sebab dalam satu blok logik, kerana lompatan gaya yang kerap menyukarkan pembacaan.
Contoh Penukaran dari Tag ke Skrip
Berikut ialah satu contoh penukaran lengkap. Versi tag:
<cfset total = 0>
<cfloop from="1" to="10" index="i">
<cfset total = total + i>
</cfloop>
<cfoutput>Jumlah: #total#</cfoutput>
Versi skrip yang setara:
var total = 0;
for (var i = 1; i <= 10; i++) {
total += i;
}
writeOutput("Jumlah: " & total);
Perhatikan dua perkara semasa menukar. Pertama, #total# dalam tag menjadi ungkapan biasa dalam skrip tanpa #. Kedua, atribut to="10" dalam tag menjadi i <= 10 dalam gelung skrip. Penukaran ini biasanya mudah untuk gelung dan penetapan, tetapi tag dengan banyak atribut mungkin memerlukan perhatian tambahan pada nilai tanpa petikan.
Soalan Lazim (FAQ)
Mana lebih baik, tag atau skrip?
Tiada jawapan mutlak. Tag lebih sesuai untuk templat paparan, skrip lebih sesuai untuk logik. Kebanyakan pembangun moden menggunakan skrip untuk logik dan tag untuk paparan.
Bolehkah saya campurkan kedua-duanya dalam satu fail?
Ya. Gunakan blok cfscript untuk logik dan tag untuk paparan dalam fail yang sama.
Apakah beza function syntax dan migration syntax?
Function syntax menyerupai pemanggilan fungsi dan disyorkan, manakala migration syntax kurang menyerupai fungsi dan memudahkan migrasi kod tag lama.
Kenapa nilai tanpa petikan berbeza antara tag dan skrip?
Dalam tag, nilai tanpa petikan sentiasa rentetan, manakala dalam skrip ia ialah ungkapan seperti nombor atau pemboleh ubah. Ini ialah punca pepijat yang kerap semasa migrasi.
Tag mana yang tidak boleh ditukar ke migration syntax?
Tag yang berkongsi nama dengan kata kunci skrip seperti throw, return dan abort tidak boleh ditulis dalam migration syntax, tetapi boleh ditulis dalam function syntax.