Wikipedia:Lua

Daripada Wikipedia, ensiklopedia bebas.
Lompat ke: pandu arah, cari


Lua ialah sebuah bahasa pengaturcaraan yang sekarang disediakan buat tapak-tapak Wikipedia melalui penyambung MediaWiki, Scribunto. Kod Lua sekarang boleh dibenamkan dlam templat wiki dengan menggunakan fungsi "{{#invoke:}}" penyambung Scribunto buat MediaWiki.

Kod sumber Lua disimpan dalam laman-laman yang digelar modul (contoh Modul:Pisang. Modul-modul ini kemudian dipanggil dengan "{{#invoke:}}") pada laman-laman templat (misalan, Module:Pisang/doc menggunakan kod {{#invoke:Pisang|hello}} bagi mencetak teks, "Helo, dunia!").

Modul-modul contoh[sunting | sunting sumber]

  • Module:Pisang: Skrip paling mudah, menyediakan satu fungsi tanpa apa-apa argumen.
  • Module:Pisang: Memerikan bagaimana mengakses dan mengguna parameter.

Meminta skrip[sunting | sunting sumber]

Lawati (Inggeris) en:Wikipedia:Lua requests bagi memohon bantuan dalam penulisan skrip Lua bagi melaksanakan tugas tertentu di Wikipedia atau projek Yayasan Wikimedia lain.

Sejarah[sunting | sunting sumber]

Sejarah buruk. {{qif}}, ParserFunctions, Lua extension, perdebatan penskripan wiki (JavaScript v. Lua), mw:Extension:WikiScripts, Tim menulis Scribunto dengan sokongan awal untuk Lua.

Selepas perbincangan bertahun-tahun, Lua dipasang pada tahin 2012 di test2.wikipedia.org, dengan jemputan terbuka kepada semua penyunting untuk menguji pembangunan modul-modul Lua. Lua dipasang pada Wikipedia bahasa Inggeris pada Februari 2013 selepas ujian di mediawiki.org dan wiki-wiki ujian Wikimedia.

Tentang Lua[sunting | sunting sumber]

Lihat juga penyampaian ringkas Brad Jorsch berkaitan contoh asas bagaimana mengubah templat teks wiki kepada modul Lua (PDF).

Lua ialah sebuah bahasa penskripan yang dapat digunakan untuk menganalisis data, mengira ungkapan, dan memformat keputusan menggunakan fungsi atau pengaturcaraan berorientasi objek. Walaupun sesetengah skrip Lua dapat dikekalkan ringkas agar memudahkan pemahaman, Lua membenarkan pengatucaraan struktur-struktur kompleks yang boleh mencabar seorang ahli sains komputer, dengan jadual, fungsi-fungsi dinamik, dan tatasusunan bersekutu yang membolehkan subskrip indeks boleh terdiri daripada perkataan selian nombor-nombor indeks. Lua juga menyokong rekursi fungsi bersarang, justeru pengaturcaraan terlalu kompleks harus dielakkan agar pengguna-pengguna lain dapat memahami bagaimana sesuatu modul Lua dapt disenggara. Berikut adalah sebuah contoh kod sumber Lua bagi fungsi helo dunia yang terkandung dalam Modul:HeloDunia:

-- Semua modul Lua di Wikipedia perlu bermula dengan definisi pemboleh ubah yang akan memegang:
-- fungsi-fungsi luar yang dapat diakses. Modul boleh diberi apa-apa nama dan juga boleh menyimpan data.
 
my_object = {};
 
-- Menambah fungsi pada pemboleh ubah. Ini dapat dipanggil di Wikipedia dengan perintah "#invoke".
-- "frame" akan mengandubgi data yang dikirim Wikipedia kepada fungsi ini apabila dipanggil.
 
my_object.hello = function( frame ) 
 
    -- Pengisytiharan pemboleh ubah lokal dan mengumpukkan data padanya.
 
    local str = "Helo Dunia!"  
 
    -- Hentikan fungsi ini dan kirim maklumat dalam "str" balik kepada Wikipedia.
    -- Fungsi "print" (cetak) tidak dibenarkan, jadi semua output dilaksanakan melalui
    -- memulangkan rentetan dengan cara ini.
 
    return str    
 
-- Hentikan fungsi.
 
end
 
-- Semua modul berakhir dengan memulangkan pemboleh ubah yang mengandungi fungsi-fungsinya kepada Wikipedia.
 
return my_object
 
-- Kita sekarang boleh mengguna modul ini dengan memanggil {{#invoke: HelloWorld | hello }}.
 
-- Perintah #invoke bermula dengan nama modul, dalam kes ini, "HeloDunia", 
-- kemudian ia mengambil nama satu daripada fungsinya sebagai argumen, dalam kes ini "helo"..

Sampel Lua terserlah dengan tag "<source lang="lua">...</source>" yang diletakkan sebelum dan selepas kod sumber Lua. Contoh Lua yang lebih kompleks dapat dilihat dalam rencana: Lua.

Panduan bagaimana mengguna Lua dalam MediaWiki dapat dilihat di mw:Extension:Scribunto/Lua reference manual.

Ujian unit[sunting | sunting sumber]

Kerangka ujian unit buat skrip Lua di Wikipedia disediakan di en:Module:UnitTests. Ia membenarkan anda untuk melaksana skrip berasaskan set input dan sahkan yang output yang disangkakan dihasilkan skrip. Ujian unit berguna terutamnya bagi mengesan regresi hasil timbulnya masalah baharu ekoran pengubahsuaian skrip.

Mengikut resam, ujian unit bagi modul seperti Modul:Pisang diletakkan dalam Modul:Pisang/kes_ujian, dan dilaksanan pada Module talk:Pisang/kes_ujian dengan contohnya, {{#invoke: Pisang/kes_ujian | laksan_ujian}}. Kaedah ujian perlu bermula dengan "ujian". Contoh ringkas daripada Modul:Pisang/kes_ujian seperti di bawah.

-- Ujian unit bagi [[Modul:Pisang]]. Petik halaman perbincangan untuk melaksana ujian.
 
local p = require('Module:UnitTests')
 
function p:test_hello()
    self:preprocess_equals('{{#invoke:Pisang | helo}}', 'Helo, dunia!')
end
 
return p

Ciri-ciri khusus buat Wikipedia[sunting | sunting sumber]

Keseluruhan: Lua hanya dapat mendapatkan input sebagai rentetan teks yang dihulurkan kepada {{#invoke:}} dan apa yang dapat diambil melalui frame:expandTemplate, frame:preprocess, dan sebagainya. Pada Wikipedia, Lua hanya menghasilkan output berbentuk teks wiki, tidak termasuk jelmaan prasimpanan atau transklusi dan binaan {{...}} lain. Juga, semua Lua yang terdapat pada laman dihadkan dengan masa CPU selama 10 saat (anda boleh melihat masa yang diambil bagi menghurai templat atau modul dalam kod sumber laman yang dipaparkan). Dan relatif berbanding Lua piawai, Lua Scribunto kekurangan pelbagai fungsi (lihat mw:Extension:Scribunto/Lua reference manual#Differences from standard Lua).

Teks wiki[sunting | sunting sumber]

Pengepala Wikipedia yang ditransklusi sering mengandungi kod tersorok seperti "UNIQ5ae8f2aa414ff233-h-3--QINU" yang mungkin perlu dibuang agar dapat dihurai dengan berkesan..

Pautan wiki jenis [[Wikipedia:Bantuan|]] tidak akan bekerja jika dipulangkan sebagai output – pautan-pautan ini perlu ditulis secara tersurat seperti [[Wikipedia:Bantuan|Bantuan]]. Jelmaan prasimpanan lain, seperti Other pre-save transforms, such as replacingpenggantian ~~~~ dengan tandatangan, juga tidak akan diproses. Transklusi templat, panggilan fungsi penghurai, dan penggantian pemboleh ubah (yakni apa-apa yang memiliki {{...}}) tidak akan diproses, dan begitu juga tag seperti <ref> atau <nowiki>.

Pelabelan templat yang diubah[sunting | sunting sumber]

Sila letakkan templat {{Perbincangan Lua}} pada semua templat yang mengguna Lua. Ini akan membantu menyampaian maklumat tentang penggunaan Lua dan pengubahan templat. Ia kelihatan seperti ini:

Templat:Perbincangan Lua