Pergi ke kandungan

Wikipedia:Lua

Daripada Wikipedia, ensiklopedia bebas.
(Dilencongkan daripada Wikipedia:MODUL)
 WP:Lua
Projek
 WT:Lua
Perbincangan
 Modul
 
 Bantuan
 
 Sumber
en: m: mw: external
 
Struktur data Wikipedia
Ruang nama
Ruang nama subjek Ruang nama perbincangan
0 (Utama/Rencana) Perbincangan 1
2 Pengguna Perbincangan pengguna 3
4 Wikipedia Perbincangan Wikipedia 5
6 Fail Perbincangan fail 7
8 MediaWiki Perbincangan MediaWiki 9
10 Templat Perbincangan templat 11
12 Bantuan Perbincangan bantuan 13
14 Kategori Perbincangan kategori 15
100 Portal Perbincangan portal 101
710 TimedText TimedText talk 711
828 Modul Perbincangan modul 829
Tidak digunakan lagi
2300 [[Wikipedia:Alat|]] 2301
2302 [[Wikipedia:Alat|]] 2303
Tidak dipasang
90 Thread Thread talk 91
92 Summary Summary talk 93
108 Buku 109
118 Draf 119
442 Course Course talk 443
444 Institution Institution talk 445
446 Program pendidikan 447
2600 Topic 2601
Ruang nama maya
-1 Khas
-2 Media
Senarai semasa (panggilan API)

Lua ialah sebuah bahasa pengaturcaraan yang sekarang disediakan buat tapak-tapak Wikipedia melalui penyambung MediaWiki, Scribunto. Kod Lua sekarang boleh dibenamkan dalam 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 sumber]
  • Module:Pisang: Skrip paling mudah, menyediakan satu fungsi tanpa apa-apa argumen.
  • Module:Pisang: Memerikan bagaimana mengakses dan mengguna parameter.

Meminta skrip

[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 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 tahun 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 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 dapat disenggara. Berikut ialah 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 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 terutamanya 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 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 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 berkesan jika dipulangkan sebagai output – pautan-pautan ini perlu ditulis secara tersurat seperti [[Wikipedia:Bantuan|Bantuan]]. Jelmaan prasimpanan lain, seperti penggantian ~~~~ 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 sumber]

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

Lihat juga

[sunting sumber]
Wikipedia Inggeris