dev

Bu sayfa, basit bir Lua şablonu geliştirme hakkındaki bazı temel bilgileri içermektedir.

Temeller

Main article: Basics

Lua şablonları ile çalışmaya başlamadan önce, sıradan bir vikimetin şablonunun nasıl kullanıldığını öğrenmeniz ve tercihe bağlı olarak hem Vikikitap gibi sitelerden Lua hakkında bilgiler edinmeniz hem de Lua kaynak kılavuzunu gözden geçirmeniz önemlidir.

Çalışma alanı

Lua şablonları, Modül ad alanı içerisinde depolanır ve tüm çalışma her zaman oraya kaydedilmelidir. Örneğin; selamdünya adındaki bir modül, Modül:Selamdünya içerisinde depolanmalıdır.

Bir modül oluşturma

Bir modülde her zaman bir tablo ve meta-modül değilse (aşağıya bakınız) o tablo için "return" içeren bir satır bulunmalıdır.

--Tablo
local p = {}
-- kod buraya gelir
return p

Bir modülün çağrılabilir olması (veya bir sayfada kullanılabilmesi) için bir işlev içermesi gerekir. Bununla birlikte bu işlev, ana tablonun parçası olmalıdır (örneğin merhaba)

--Tablo
local merhaba = {}

--çağrılabilir
function merhaba.selam(frame)
   return "Merhabalar"
end

--çağrılamaz
function isim(frame)
   return "Adınız nedir"
end
return merhaba

Çalıştırma zamanı

Kullanılan Lua modülleri en fazla 10 saniyeliğine çalıştırılabilmektedir. Bu da bir sayfadaki modülün çalıştırılmasının 10 saniyeyi geçemeyeceği fakat geçerse bir hata ile karşılaşılacağı anlamına gelmektedir.

Modülleri başka bir vikiye kopyalama

Burada yer alana modüller başka bir vikide de kullanılabilir fakat bunun için bazı adımların takip edilmesi gerekir:

  1. Modülü kendi vikinize kopyalayın, örneğin Modül:Links
  2. Vikinize bağlı olarak tüm modülleri kopyalayın. Bu biraz karmaşıktır çünkü Fandom eski bir Scribunto sürümü kullanmaktadır. Yine de bu adımlar yardımcı olacaktır:
    1. Modül sayfasını açın ve require("metin") gibi metin içeren bölümleri bulun. Bağlantılar modülündeki "Dev:Arguments" metni buna örnek olarak verilebilir.
    2. dev.fandom'da veya başka bir vikide modülü arayın, örneğin Modül:Arguments
    3. Bu Modül:Arguments modülünü vikinize kopyalayın
    4. Tüm require("Dev:")bahsetmelerini require("modül:") ile değiştirin, örneğin require("Modül:Arguments")
  3. Kopyalanan modüldeki her bir require("") için ikinci adımı tekrarlayın.

Girdi kullanımı (parametreler)

Çağırma sırasında bir modüle girdi (veya şablon parametreleri) sağlanabilir.

Sözdizimi

{{#invoke:modüladı|işlevadı|giriş1|giriş2|giriş3|...}}

Aşağıdaki kod çalıştırıldığında tüm bu girdileri içeren bir tablo (frame) oluşur, bir işlevden geçer ve args denilen (örneğin frame.args) bir alt-tabloda depolanır. Örneğin aşağıdaki şekilde bu modülü kullanabiliriz:

{{#invoke:merhaba|selam|john}}
{{#invoke:merhaba|selam|isim=john}}
--Modül:Merhaba
--Tablo
local merhaba = {}

function merhaba.selam(frame)
   local isim = frame.args[1] or frame.args["isim"]

   return "Merhabalar " ..isim
end

return merhaba
Sonuç
Merhabalar John

Açıklama: Bağımsız değişkenler (args), tüm parametreleri içeren bir listedir. İlk değer için args[1] (örneğin john) ve "isim" adındaki bir parametreye erişebilmek için args["isim"] kullanılır.

Şablon girdisine erişim

Eğer yukarıdaki modüldeki kod bir vikimetin şablonunda kullanılırsa parametrelere erişim sağlanamaz. Bu tarz bağımsız değişkenleri erişim sağlayabilmek için öncelikle frame:getParent() kullanılarak ana çerçevenin çağırılması ve daha sonra frame:getParent().args ile alt-tabloya ulaşılması gerekir:

Şablon:selam
{{#invoke:merhaba|selam}}
Modül:merhaba
--Tablo
local merhaba = {}

function merhaba.selam(frame)
   local parent = frame:getParent()
   local isim = parent.args[1]
   local isim2 = parent.args[2] or ""

   return "Merhabalar :" ..isim ..' '..isim2
end

return merhaba
Kullanım
{{selam|Jack}}
Sonuç
Merhabalar :Jack 
Kullanım
{{selam|Jack|Jill}}
Sonuç
Merhabalar :Jack Jill
Örnek Parametre Şablon Modül Sonuç
{{selam|john}} 1 {{{1}}} frame:getParent().args[1] john
{{selam|isim=Spock}} isim {{{isim}}}} frame:getParent().args["isim"] Spock
{{#invoke:merhaba|selam|john}} 1 frame.args[1] john
{{#invoke:merhaba|selam|isim=Worf}} isim frame.args["isim"] Worf
{{#invoke:merhaba|selam|jack|jill}} 1,2 frame.args[1], frame.args[2] Jack , Jill

Program hataları

Bir modül olması gerektiği gibi çalışmadığında sayfada oluşacak bir hatayı tetikler. Vikipedi'de programlama hatalarının ayrıntılı bir açıklamasını bulabilirsiniz.[1]

Gelişmiş

Lua'nın sağladığı avantajlardan birisi de harici veya başkaları tarafından oluşturulmuş modüllere erişim olanağı sağlamasıdır. Bu sayede aynı şeyleri tekrarlama zorunluluğunuz azalır ve yeni fikirlerinize daha fazla zaman ayırabilirsiniz.

Diğer modülleri kullanım

Kütüphane ve modüllerin kullanılabilmesi için o kütüphanenin içe aktarılması gerekir. Bu işlem require yöntemi ile gerçekleştirilir:

--Modül:Libraries
local library = {}

function library.selam(frame)
   local merhaba = require("Modül:merhaba")

   return merhaba.selam(frame)
end

return library
{{#invoke:library|selam|Zeus}}
Sonuç
Merhabalar Zeus

Not: Sözdizimi büyük harfe duyarlıdır. Bu yüzden kodunuz "Dev" != "dev" şeklinde olmalıdır.

Meta modüller

Bir sayfada kullanılmak üzere yazılmayan (örneğin {{#invoke) ve sayfada kullanılabilen herhangi bir işleve ihtiyaç duymayan modüllerdir.

Harici tabloları kullanma

Harici bir modül ile aynı şekilde harici bir tabloya erişim sağlamak da mümkündür ve onu sayfa başına bir kez yükleyerek daha verimli olmasını sağlayan bir yöntem daha vardır (mw.loadData).

--Modül:tablolar
local tablolar = {'elma','armut','kiraz'}
return tablolar
Kullanım
--Modül:gosterobjeler
local p = {}

function p.goster(frame)
   local objeler = require("Modül:tablolar")
   --loadData kullanımı
   local objeler2 = mw.loadData("Modül:tablolar")

   return objeler[1] ..' & ' objeler2[2]
end

return p
{{#invoke:gosterobjeler|goster}}
Sonuç
"elma & armut"

Global modüller

Main article: Global modules

dev.fandom.com sitesinde depolanan modüllere global modüller denir. Normal bir vikide yer alan modüller ile aynı şekilde çalışırlar fakat başka bir vikideki (örneğin marvel.fandom.com) herhangi bir Lua modülü aracılığıyla erişim sağlanabilir. Aralarındaki tek fark modülü barındıran sözdizimindedir ("Modül" yerine "Dev" kullanılır):

local global_invocable = require("Dev:Invocable")
local global_Tables = mw.loadData("Dev:Tables")

Araçlar

Bir modülü oluşturmada yardımı dokunacak çeşitli araçlar vardır:

Kod düzenleyici

Kod düzenleyici (veya ace düzenleyici) - gerektiğinde devre dışı bırakılabilen varsayılan düzenleyicisidir.

Ace düzenleyici özellikle klavye kısayolları ve makrolar gibi bazı gizli özelliklere sahiptir.[2]

Klavye kısayolları

Bazı kullanışlı kısayolların listesi aşağıda verilmiştir:

Windows/Linux Mac Eylem
⎇ Alt + ⇧ Shift +  ⌘ Command + ⌥ Option +  Satırı aşağıya kopyalar
⎇ Alt + ⇧ Shift +  ⌘ Command + ⌥ Option +  Satırı yukarıya kopyalar
⎇ Alt +  ⌥ Option +  Satırı aşağıya taşır
⎇ Alt +  ⌥ Option +  Satırı yukarıya taşır
⎇ Alt + ⌦ Delete Ctrl + K Satır sonuna kadar siler
⎇ Alt + ← Backspace ⌘ Command + ← Backspace Satır başına kadar siler
Ctrl + ← Backspace ⌥ Option + ← Backspace, Ctrl + ⌥ Option + ← Backspace Soldaki kelimeyi siler
Ctrl + ⌦ Delete ⌥ Option + ⌦ Delete Sağdaki kelimeyi siler
--- Ctrl + O Satırı ayırır
Windows/Linux Mac Eylem
Ctrl + ⇧ Shift + E ⌘ Command + ⇧ Shift + E Makroları tekrar yürütür
Ctrl + ⎇ Alt + E --- Makroları kaydeder

Sözdizimi vurgulama ve kontrol etme

İnteraktif kod editörleri her zaman sözdizimi hatalarını vurgular ve nasıl düzeltilebilecekleri hakkında yararlı bilgiler verir.

Hata ayıklama konsolu

Main article: Debug console

Kodunuzu test etmenizi kolaylaştıran bir konsol veya terminaldir.

See also

Kaynakça