Lua Programlama Dili Söz Dizimi Öğrenimi (Türkçe)


Materyal hakkında ön bilgilendirme.

Tahmini okuma süresi: 18 dakika
Öğrenme zorluk seviyesi: Basit-Orta

Rectangle 2 @ProBaturay tarafından oluşturulan diğer bir benzersiz materyale hoş geldiniz!

Ön Söz

Okurken keyif alacağınız, gözünüzü alamayacağınız tasarımları inceleyeceğiniz, bu sayede öğrenimi kolay bir şekilde gerçekleştirebileceğiniz bu materyalde Roblox platformunun kendi uygulamalarında benimsediği Lua programlama dilinin söz dizimi kurallarını en ince ayrıntısına kadar öğrenebilirsiniz. Bu materyalde Luau diline dair hiçbir bilgi yer almamakta, sadece Lua 5.1 sürümü hakkında bilgi verilmektedir. Burada edineceğiniz bilgiler, Luau dilini anlamanızda rehber olacaktır.

Bu içerik hazırlanırken TSE Bilişim Sözlüğü (2006) kitabındaki terimlerden yararlanılmış olup Güncel Türkçe Sözlük’te karşılığı olan terimlere, güncel yazım biçimleriyle düzeltmeler yapılmıştır.

Umarım bu içerik size faydalı olacaktır. İyi okumalar!

İçerikler

  • Lua Programlama Dili
  • Lua’nın Roblox’ta Kullanılışı
  • Söz Dizimi Kuralları
    • Sözcüksel Birimler ve İşaretler
    • Veri Değerleri ve Türleri
    • Değişkenler
    • Deyimler (I)
    • Deyimler (II)
  • Dilin Diğer Özellikleri
  • Öneriler
  • Kapanış

Lua Programlama Dili

 Yaratıcıları Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes olan Lua, günümüzde yediden yetmişe her yaştaki insanın kolaylıkla anlayabileceği bir türden dil olup birçok şirketin ve bireysel girişimcilerin (Adobe Photoshop Lightroom, World of Warcraft, Garry’s Mod ve en önemlisi Roblox) kullandığı bir dil hâline gelmiştir. Piyasaya sürülüş tarihi 1993’tür. Bu dil, daha çok oyun programlarında yerini almıştır.

 Lua dilinin anlaşılabilirliğinin yüksek olmasının temel nedeni, insan diline yakın olması ve ortalama insan beyninin kavrayabileceği derecede bir söz diziminin olmasıdır. Ayrıca, birbirinden farklı özellikleri olan yapılar içermesi, Lua’yı yüksek seviyeli bir dil olmasını sağlamıştır.

 Aynı zamanda Lua, kod parçalarında yazılan birimlerin çok hızlı işlendiği bir dildir.

Faydalar
Tablo 1: Lua’nın getirdiği birtakım faydalar

Lua’nın Roblox’ta Kullanılışı

 Roblox’un kurucuları olan Erik Cassel ve David Baszucki, programcıların kolay bir şekilde oyun oluşturabilmeleri için Lua programlama dilini tercih etmişlerdir. Bu sayede Roblox Studio’ya her yaştan insanlar; öğrenimi kolay olan, hızlı işleyen bir programlama diliyle betikler yazarak hayallerindeki yapıtları gün yüzüne çıkarırlar.

 Roblox’ta oluşturulan oyunların çoğu, zamanla programlama dili sayesinin kullanımıyla tanınmıştır. Birinin programlama dilini kullanması, onun bilgisayar programcısı unvanına sahip olduğunu gösterir. Roblox’taki bilgisayar programcıları, hem bireysel olarak oyun çıkarabilir hem de birtakım insanlardan oluşan gruplara katılarak oyunlar için betik yazabilir.

 Programcıların yazdığı betiklerle oyunların ilgi çekmesi, oyuncuların platforma para yatırmasına ve sanal para kullanmasına zemin hazırlar. Bu sanal para oyun içi işlemlerde kullanıldığında (örn. oyun içinde kullanılan başka bir para birimini yükseltme, belirli bir süre için geçerli olan eşyalar vb.) geliştiricilere kazandıkları toplam sanal paranın %30’unun pazar yeri ücreti olması suretiyle %70’i geliştiricilere bırakılır (bu yüzde değerleri konuya göre değişebilir). Bu sanal para, belirli bir miktarı aşınca tekrar gerçek hayatta kullanılan para birimine dönüştürülebilir (örn. 100,000 sanal para için 350 dolar).

 Geliştiricileri motive eden para kazanma isteği, çoğunlukla Lua programlama dilini etkin bir şekilde kullanmaktan geçer. Bunun için, Lua’nın sindirilmesi gerekmektedir. O hâlde, öncelikle söz dizimi kurallarının öğrenilmesi şarttır. Lua’nın anlam bilimi çerçevesindeki davranışlarından ziyade söz dizimi kurallarının daha önce öğrenilmesi, dili öğrenmenize kolaylık sağlar.

 Roblox, ilk günden beri Lua’nın 5.1 sürümünü kullanmaktadır. Lua 5.1 sürümünün bütün özellikleri Roblox’ta yer almaz çünkü bazı özellikler, programlama dilinin kullanılış amacının dışına çıkmaktadır. Aynı zamanda, Lua 5.1 sürümünün ileri sürümlerinde eklenen bazı özellikler, Roblox Lua’da mevcuttur çünkü kullanılmaları kolaylık sağlar. Lua 5.1 sürümünde var olan özelliklerin yaklaşık %85’inden fazlası, Roblox Lua’da kullanılabilir durumdadır. Kullanılamayan durumlara örnekler: “io, package” kütüphanelerinin kullanımdan kaldırılması, “os” kütüphanesinde “execute” komutunun kaldırılması…

Söz Dizimi Kuralları

 Sözcüksel Birimler ve İşaretler

 Programlamanın söz dizimi kurallarına göre, birkaç sözcük diğer bütün kelimelerden ayrı yazılmalıdır çünkü yazılan programın istendiği gibi işleyebilmesi için bu sözcüklerin kullanılması gerekmektedir. Eğer bu sözcükler olmasaydı böyle bir programlama dili de olmazdı.

Kelimeler
Tablo 2: Birtakım görevleri yerine getirmek üzere kendilerine yer ayrılmış kelimeler

 Bu tabloda geçen kelimeler, bütün harfleri küçük olması şartıyla ve hem başında hem sonunda en az bir tane beyaz boşluk karakteri bulundurma suretiyle yazılabilir. Beyaz boşluk karakteri şöyle tanımlanabilir: Arayüz oluşturma sürecinde günlük hayatta kullanılan harf ve sembollerin kullanımı sırasında arada bir girinti bırakan bilgisayar karakterleridir. Örneğin, 1. kod bloğu doğru bir şekilde çalışırken ikincisi söz dizimi hatası verir. Çünkü “do” ve “print” kelimeleri, ayrı birimler hâlinde, aralarında boşluk karakteri olacak şekilde yazılmalıdır.

Merhaba!

Hata

 Kelimelerden bahsetmişken, aynı durum birkaç sembol için de geçerlidir. Semboller, çeşitli matematiksel işlemleri yapabilme, program yazarken karışıklığı önleme, doğruluk tespitinde rol alma gibi yetenekleri olan bilgisayar karakterleridir.


Tablo 3: Birtakım görevleri yerine getirmek üzere kendilerine yer ayrılmış semboller

 Semboller, işlevini gördüğü sürece kelimelere hem bitişik hem ayrı yazılabilir. Aşağıda görüldüğü üzere, sembollerin bazıları kelimelere bitişik ve kelimelerden ayrı yazılmıştır fakat bu, programın yürümesine engel olmamıştır. Boşluk karakterleri silindiğinde oluşan her aynı satır, birbirinin aynısı olan görevi üstlenmiş olur.

Semboller
#” sembolü, bir dizgide kullanılan toplam karakter sayısını gösterir.

 Veri Değerleri ve Türleri

 Programlama dillerinde veri türleri çok önemli bir yere sahiptir. Örneğin edebiyat derslerinde metin yazma, bireysel olarak kitap okuma esnasında Türkçe karakterler görürüz. Bunun bilgisayarda karşılığı string (dizgi, dizi) türüdür. Çevrim içi banka, blok zinciri işlemlerinde sayılar kullanılırken bu veri türleri number (sayı) ile ifade edilir ve bunun da alt dallarına ayrılan float (kayan noktalı sayı), integer (tam sayı) gibi kavramları vardır. İşte bunlar, türler olarak tanımlanır.

 Türler üzerine daha ayrıntılı bir bilgi edinmek için bu adrese gidebilirsiniz.

 Lua’da değerler, bir türün taşıyabileceği farklı anlamları ifade eder. Örneğin; 1, 2, 3.5 sayıları birer değerdir ama hepsinin türü number olur. Her bir değerin türü vardır. Lua’da bütün değerler birinci sınıf değerlerdir. Bunun anlamı; değerler bir değişken olarak atanabilir, fonksiyonlarda parametre ve geri dönüş argümanı olarak kullanılabilir.

 Bazı değerler olabilir ki aynı tür gibi gözükmesine rağmen farklı türler olabilir. Aşağıdaki kod parçasında birinci olarak yazdırılan değerin türü string iken ikincisinde number olur. Bunun sebebi, string oluşturmak için çift tırnak işareti kullanılmışken number oluşturmak için sayının kendisi açık bir şekilde yazılmıştır.

Değerler ve Türler

 O zaman şunu çıkarabiliriz ki aynı iki değerin türü de aynıdır. Farklı iki değerin türü aynı da farklı da olabilir.

 Değişkenler

 Adı üzerinde, değişkenler; kendilerine değer atanabilen, istenildiği zaman istenildiği yerde kullanılabilen bir söz dizimi kuralıdır.

 Değişken oluşturulurken şunlar göz önünde bulundurulmalıdır:

  1. Değişkenin ismi, İngilizce alfabesinde yer alan harfler dışındaki harflerle oluşturulamaz.
  2. Değişkenin ismi, sayı olarak yazılan hiçbir rakamla başlayamaz.
  3. Değişken ismi yazılırken alt çizgi “_” işareti kullanılabilir. İşaret; başta, ortalarda ve sonda bulundurulabilir. Bir kere yazılabildiği gibi daha fazlası da yazılabilir.

 Üç tür değişken vardır: genel, yerel ve tablo indis-değer, anahtar-değer alanları.
Değişkenler, değer atanmadan önce ilk değer olarak nil değerine sahiptir. İlk eşittir işaretiyle değişken değeri belirlenmiş olur.

 Değişkenleri atamada sadece bir eşittir “=” kullanılır. İki eşittir “==” ve eşit değildir “~=” değer karşılaştırmalarında kullanılır.

 1) Genel değişken

 Bu tür değişkenler; sadece değişken ismi, bir tane eşittir işareti ve değerin kendisi kullanılarak oluşturulur. Aşağıda a, b, c değişkenlerinde değişkenin ismi kendileridir. Eşittir işaretinin sağ tarafında kalanlar değeri göstermektedir.

Genel değişkenler

 Genel değişkenler, aynı zamanda herhangi bir deyim içinde de yazılabilir ve deyim dışında da kullanılabilir.

Genel değişkenler Genel değişkenler

 Betikte var olmayan genel bir değişkenin ismi geçiyorsa bu değişkene otomatik olarak nil değeri atanır.

Genel değişkenler

 Genel değişkenlerin bariz başka bir örneği, çokça kullanılan yerleşik değişkenlerden olan; table, string, math, özellikle Roblox nesne hiyerarşi modelinin en başını oluşturan game değişkenleridir.

 Bu değişkenler için “Betikte tanımlı değil.” demek yanlış olur. Bu genel değişkenler, Lua’nın kendi yorumlayıcılarında yerleşiktir. Örneğin, aşağıdaki kod parçasında string kütüphanesi, Lua tarafından tanındığı için renklendirilmiştir. Bu durum, aynı zamanda print fonksiyonu için de geçerlidir.

Genel değişkenler

 2) Yerel değişken

 Genel değişkenden farklı olarak, bu değişkenler belli deyimler ve fonksiyonlar için kullanılır. Bu tür değişkenlerin belli bir kapsamı vardır. Bu kapsam dâhilinde olan deyimler ve fonksiyonlar yerel değişkenleri kullanabilirken bu kapsam dışındakiler, kullanamazlar.

 Yerel değişken oluşturmak için bir local kelimesi, değişken ismi, bir eşittir işareti ve değer kullanılır.

Yerel değişkenler

 Herhangi bir deyim ya da fonksiyon içinde tanımlanmış yerel bir değişken, kapsamının dışında kullanılamaz.

Yerel değişkenler

 Eğer aynı ismi taşıyan iki farklı değişkenlerden biri genel, biri yerel olarak tanımlanmışsa işler bir öncekine göre farklı olabilir.

 Aşağıdaki iki değişken de yereldir. Her değişken kendi kapsamında oluşturulmuştur. Birinci değişkenin “Merhaba!” yazısına dönüşmemesinin nedeni, ikinci değişkenin kendi kapsamında yazılmasıdır. do end deyiminde değişken, “Selam!” olmaktan çıkıp “Merhaba!” dizgisine dönüşmektedir.

Yerel değişkenler

 Bir betikte her bir kapsam için kullanılabilecek en fazla yerel değişken sayısı 200’dür. 200’ü aşkın yerel değişkenler, betiği durdurur ve hataya sebep olur.

 3) Tablo değişkeni

 Her ne kadar bir değişken gibi görünmese de bunu göstermekte fayda var çünkü indis ve anahtarların sahip olduğu değerler de eşittir işaretiyle atanır.

 Aşağıda birinci tablo indislerden, ikinci tablo anahtarlardan oluşmaktadır. Değerler bir eşittir işaretiyle oluşturulmuştur.

Tablo değişkeni

 Deyimler (I)

 Ön bilgi

 Bu ve bir sonraki bölümün Deyimler olarak adlandırılmasının nedeni, İngilizcedeki statement ve expression kelimelerinin Türkçe bilişim sözlüklerindeki karşılığının deyim olmasından kaynaklanmaktadır.

 Bu bölümde, anlamı “Ya bir bildirimi gösteren ya da yapılacak eylemlerin tanımını, (eğer varsa) bu eylemlerde yapılmasında kullanılacak işlenenleri ve sonuçların düzenlemesini içeren bir iş biriminin tarifini veren açıkça sonlandırılmış söz dizimsel birim.” olarak geçen statement sözcüğü ele alınmıştır.

 Lua’da söz dizimi kuralı olarak deyimler bulunur. Deyimler, birçok işlevi yerine getirmemizi sağlar. Bu işlevler arasında koşullar, döngüler, atamalar vs. vardır.

 1) Birim

 Lua’da yazılan her bir kod yürütme parçacığı bir birim olarak geçer. Bu birimler, birinci satırdan başlayarak son satıra kadar sırasıyla gerçekleştirilir.

Birim

 Her satır, her bir birime denk gelmeyebilir. Bir satırda birden fazla birime rastlanabilir.

Birim

 Her bir birimin sonuna noktalı virgül;” işareti getirilebilir fakat bu, birimin işlevini değiştirmez. Sadece bir istisna dışında, işaretin kullanılması tercih meselesidir.

Birim

 Noktalı virgülün kullanılması zorunlu kılınan tek bir durum vardır: Eğer bir birim, fonksiyon çağırmaya meyilliyse ve parantez kullanımı başka bir satırda yapılmışsa bu, söz dizimi belirsizliğine sebep olur.

Birim - Söz dizimi belirsizliği

 Yukarıda verilen kodun iki şekilde yorumlanması vardır:

  1. a değişkeni bir fonksiyondur ve bu fonksiyon çağırılmak isteniyor.
  2. Son parantezler, isimsiz fonksiyona karşılık gelen bir birimin çağırıldığını ifade ediyor.

 Bu karışıklığı gidermek için aşağıdaki gibi noktalı virgül kullanılır. Oluşturulan fonksiyonlardan birincisinin ismi “a” iken ikinci fonksiyonun ismi yoktur. İsmi olmayan fonksiyonlara isimsiz fonksiyon denir.

Birim

 Fonksiyonlar hakkında bilgi edinmek için “Deyimler (II)” bölümüne gidebilirsiniz.

 2) Birim Blokları

 İsminde var olduğu gibi, bir veya birkaç birimden oluşan bloklardır. Bu blokların kullanım faydalarından biri şudur: Değişkenler bölümünde bahsedildiği gibi kapsam sınırlayan değişkenlerin kullanılmasına olanak tanır. Aşağıda do end ve if then end kalıpları verilmiştir. Bunların içinde yazılan kodlar bir birim bloğunu oluşturur.

Birim blokları

 3) Atama

 Bu kısım değişkenler için geçerlidir.

 Lua’da bir veya birden fazla değişken aynı satırda tanımlanabilir.

 Şekildeki gibi a değişkeni 1 değerine sahiptir. b, c, e değişkenleri ise değerlerin sıralandığı şekilde atanır. b, 2; c, 3; e, 7 değerine sahip olur.

Atama

 Başka bir özellik, değerlerin birbiriyle yer değiştirebilmesidir. Aşağıdaki iki kod parçacığı aynı işlevi üstlenmez. Birincisi, değerleri olduğu gibi değiştirir. İkincisi, önce birinci sonra ikinci değişkene değer atar. İkisi de farklı sonuçlar doğurur.

Atama Atama

 4) Kontrol akışı

 4.1) while Döngüsü

 Bu döngüler, bir şart yerine getirildiği sürece devam eder. Bu şart, bir an olsun while biriminde kontrol edildiğinde eğer şart sağlanmıyorsa döngüler durur. Aşağıdaki kod parçacığında a değişkeni true olduğu için döngünün bloğu sadece 1 kez yürütülür. Blokta a değişkeni false değeri atandığı için blok 2. kez yürütülememiştir.

Döngü

 4.2) repeat Döngüsü

 Bir önceki döngüye kıyasla neredeyse bir farkı yoktur. Tek farkı insan dili olarak bakıldığında bir şeyin gerçekleşmesine kadar blok yürütülmesi demektir.

Döngü

 4.3) for Döngüsü

 Bu döngüde gerçekleştirme miktarı programcıya bırakılmıştır. Ayrıca bu döngüde anlam bilimi çerçevesinde diğer döngülere kıyasla koşul yoktur, bu döngü bir yerden başlayıp bir şeyin sonuna kadar kullanılır. Elbette, önceden bahsedilen döngülerde de bu durum, programcıya mahsustur fakat bu döngüde daha açık bir şekilde yansıtılmıştır. Bu döngünün iki türü vardır: Sayısal ve genel.

Sayısal döngüde iki ya da üç değer kullanılabilir:

  1. Başlangıç değeri: Hangi sayıdan başlandığını gösteren değer
  2. Bitiriş değeri: Hangi sayıda bittiğini gösteren değer
  3. Artış değeri (tercihe bağlı): Her bir döngünün ardından kullanılan değişkenin artışı için kullanılan miktar

Döngü Döngü

 Döngüde başlangıç değeri olarak yazılan değerin her zaman bir ismi olmalıdır. Aksi hâlde söz dizimsel bozukluğa yol açar. Örneğin for i = 1, 3 do yerine for 1, 3 do yapılamaz.

 Eğer i değeri ile artış değeri toplandığında bitiriş değerini geçiyorsa döngü, blok yürütülmeden durdurulur.

Döngü

 Artış miktarı değerini de eklersek aşağıdaki görünüm elde edilir.

Döngü Döngü

 Artış miktarı hem pozitif hem negatif olabilir. Pozitif olursa başlangıç değeri giderek büyürken negatif olursa bu değer küçülerek gider.

 Bu döngünün diğer bir kullanılış şekli ise genel for döngüsüdür. Bu, in sözcüğünün kullanımını da gerektirmektedir. Genel döngü, fonksiyonlarla (aynı zamanda iteratör) çalışır. Döngünün hangi biçimde gerçekleşeceği fonksiyonlarla belirtilir. Örneğin ipairs fonksiyonu, bir tablodaki bütün indisleri, 1’den başlayarak birer birer artan bütün indisleri kullanır.

Döngü

 Döngünün başka bir özelliği daha vardır. Yukarıdaki ipairs fonksiyonu yerine bambaşka bir fonksiyon da yaratılabilir. Örneğin, aşağıdaki kod parçası ilk 10 asal sayıyı yazdıran bir programdır.

 Ne kadar uzun bir kod parçası gibi görünse de, ilk on asal sayıyı getiren program böyle yazılabilir. Genel for döngüsünün kullanıldığı son kısım, asal sayıları asal değişkenine atar ve böylece asal sayılar kullanılmış olur.

 4.4) if Koşulu

 Doğruyu sağlayan bütün değerler, bu deyimin içindeki parçacığın yürütülmesini sağlar.

 Koşul deyimlerinde (şart, kondisyon) if ve then sözcükleri kullanılır. Bu iki kelimenin arasına şart getirilir. Eğer bu şart sağlanırsa içindeki kodlar yürütülür, aksi hâlde if then deyimi atlanır. Bir koşul deyiminde birden fazla karşılaştırma varsa karşılaştırmaya soldan başlanarak işlem öncelik sırasına dikkat edilir.

 Karşılaştırma işleçlerine Deyimler (II) bölümünde göz atabilirsiniz.

Koşul

 Koşullar, and, not, or kelimeleriyle de oluşturulabilir

  • and: birinci karşılaştırma doğruysa sağdaki koşula bakar. Karşılaştırmalardan biri yanlış ise koşul yanlış sayılır.
  • or: birinci karşılaştırma doğruysa sağdaki koşula bakmadan koşulu doğru kabul eder. Aksi hâlde sağdaki koşula geçer. Sağdaki koşulların hepsi yanlış ise koşulun tamamı yanlış kabul edilir.
  • not: Koşulun doğruluğunu ters çevirir. Eğer bir koşul doğruysa yanlış, yanlış ise doğru olur.

Koşul

Koşul

 Yukarıda and ve or kelimelerinin kullanıldığı kod parçalarının birinde karşılaştırmalar parantez içine alınmışken diğerinde alınmamıştır. Bu, betik yürütülmesinde herhangi bir sakınca çıkarmaz.

 Bu durum İşlem Öncelik Sırası bölümünde anlatılmıştır.

 Bir koşul sağlanmadıysa başka bir kod parçasının yürütülmesi de istenebilir. Bu yüzden else gerekebilir.

Koşul

 Eğer bir koşul sağlanmadıysa ve diğer karşılaştırmalar sırasıyla yapılmak isteniyorsa elseif sözcüğü devreye girer.

Koşul

 Koşulların hiçbiri sağlanmadıysa yine else kullanılabilir. Bir if deyiminde birden fazla elseif bulunabilirken sadece bir tane else sözcüğü olabilir.

 4.5) Fonksiyon Çağırma

 Fonksiyonlar, kod akışından farklı olarak hemen yürütülmezler. Bunun için belirli semboller kullanılır.

Fonksiyon Çağırma

 Fonksiyonları çağırmak için genellikle parantezler kullanılır fakat parantezlerin kullanılmadığı durumlar çok az görülür. Parantez kullanmadan fonksiyon çağırmak, söz dizimsel şekerdir.

Fonksiyon Çağırma

 4.6) break ve return

 Döngüyü belli bir yerde durdurmak için break sözcüğü kullanılır. Aşağıdaki kodda 5’e kadar bütün doğal sayıların yazdırılması istenirken bitiriş değerinin 10 olduğu görülüyor. Bitiriş değerine ulaşılmadan blok, 5 sayısında durdurulmuştur.

break

return kelimesi ise, bir kapsamın dâhilinde olan fonksiyonları durdurur ve argümanlar döndürür. Bu kelime, aşağıda kodun akışı durdurulacak şekilde yazılmıştır. Döngü 1 saniye boyunca çalıştıktan sonra return tarafından durdurulacaktır.

return

 Başka bir şekilde kullanılan return kelimesi, burada ise fonksiyonu durdurup bir argüman döndürmüştür.

return

  Deyimler (II)

 Bu bölümde, anlamı “Bir ya da daha fazla işleneni sonucu olarak bir veri değerinin hesaplanmasını tanımlayan dil yapısı.” olan expression kelimesinden bahsedilmiştir.

 1) Fonksiyon

  Belli bir kod parçasının aynı betikte istenildiği zaman kullanılması için oluşturulan veri türleridir. Fonksiyon türleri üç tanedir: Genel, yerel ve isimsiz.

 Genel ve yerel olarak oluşturulan fonksiyonlar, değişkenler tarafından tutulabilir fakat isimsiz fonksiyonlar, o anlık için yazılan fonksiyonlar olup bir isme sahip değildir. Bu yüzden isimsiz fonksiyonlar değişkenler tarafından kontrol edilemez.

 Genel ve yerel kavramını Değişkenler bölümünde inceleyebilirsiniz.

Fonksiyonlar

 İsimsiz fonksiyonlara örnek olarak şu gösterilebilir: Bir oyuncu katıldığında oyuncunun katıldığına dair bir fonksiyon çağırılır. Aşağıda görüldüğü üzere fonksiyonun ismi yoktur. Bu yüzden isimsiz fonksiyon olarak anılır.

Fonksiyonlar

 İsimsiz fonksiyon oluşturmak için local kelimesine ihtiyaç kalmaz çünkü isimsiz fonksiyonlar daima içinde tanımlandığı kapsama aittir.

 Sıra geldi söz dizimsel şekere. Fonksiyonların söz dizimsel şeker hâli asıl yazılışlarından daha çok kullanılır. Fonksiyonların asıl yazılışı aşağıdaki gibidir.

 Birinci fonksiyon genel, ikinci fonksiyon yerel fonksiyonun asıl olarak yazılışıdır.

Fonksiyonlar

 Aşağıda da bu fonksiyonların kısaca nasıl yazılabildikleri gösteriliyor.

Fonksiyonlar

 Fonksiyonlarda parametre adında başka bir kavram daha vardır. Parametreler, fonksiyonda kullanılması gereken birtakım değerleri içeren değişkenlerdir.

Fonksiyonlar

 Bu fonksiyonun belirli bir mesajı yazdırması isteniyorsa fonksiyon çağırıldığı zaman parametrelere getirilecek değerler sırasıyla yazılır. mesaj kelimesi bir parametredir ve fonksiyon çağırıldığı anda bu parametre “Merhaba!” yazısına dönüşür. Böylelikle istenilen her mesaj, parametrelerle yazdırılabilir.

 Bir fonksiyonda birden fazla parametre yazılabilir.

Fonksiyonlar

 Parametreler yazılırken bazen parametre isimleri önemli olmayabilir. Bu parametre isimleri yerine üç nokta () işareti getirilerek bütün parametreler kapsanmış olur. Programlamada böyle oluşturulan fonksiyonlar, istenilen sayıda argüman kabul eden fonksiyonlar (variadic function) olarak geçer.

 Üç nokta “…” ile gösterilen ifadeler, fonksiyona belirli bir sayıda geçirilmiş değerleri kapsar. Bu değerler üç nokta ile gösterildiğinde çoklu ilişki (tuple) oluşur. Çoklu ilişkiler, Lua’da herhangi bir veri türünü ifade etmez. Yapı itibarıyla tablolara benzerdir fakat aynı değildir. Örneğin; tablolardan, herhangi bir indis kullanılarak bir değer bulunabili. Çoklu ilişkilerde bu durum söz konusu değildir.

Çoklu ilişki

 Çoklu ilişkiler, tabloya dönüştürülürse bu durum çözülmüş olur. Demetteki her bir değer, tabloda belirli bir indise sahip olur.

Çoklu ilişki

 İstenilen sayıda argüman kabul eden fonksiyonlarda “...” işareti, içinde kullanıldığı fonksiyona özgüdür. Eğer işaret, parametre olarak yazılmadıysa söz dizimsel bozukluk ile karşılaşılır.

Çoklu ilişki

 Aşağıda başka bir durum gösterilmiştir. Genel olarak oluşturulan bir fonksiyonun içinde yerel bir tane daha oluşturulmuştur. Genel fonksiyonun parametreleri “...” işareti ile kapsanmıştır. Bu işaret, sadece bu kapsamda kullanılabilirken yerel fonksiyonun kapsamı farklı olduğu için yerel fonksiyonun içinde kullanılması da söz dizimsel bozukluğa yol açar.

Çoklu ilişki

 Bunu düzeltmek için, genel fonksiyonda tanımlanan üç nokta işareti, yerel fonksiyonun parametre kısmına yazılır ve yerel fonksiyonun tanım kısmında başka bir üç nokta işareti yazılır.

Çoklu ilişki

 Fonksiyonlar, aynı zamanda nesne yönelimli programlamada ve modüllerde kullanılır. Aşağıda bir modülden örnek verilmiştir. Bir tablo oluşturularak bu tablonun içine bir fonksiyon yüklenmiştir. Ardından bu fonksiyon, tablodaki karşılık gelen anahtar kullanılarak çağırılmıştır.

Fonksiyonlar

 Bir tablodaki fonksiyonların kullanılması, içerdiği parametrelere bağlıdır. Bir fonksiyon eğer tabloda yer alıyorsa bu fonksiyonun birinci parametresi tablonun kendisi, diğer parametreleri fonksiyon çağırıldığında koyulan değerlerdir. Bunun sebebi, nesne yönelimli programlamayla ilişkilidir.

Fonksiyonlar

 Burada self kelimesi, tablo2 değişkeninin kendisidir çünkü yaz fonksiyonu, nokta (.) kullanılarak oluşturulmuştur. mesaj parametresi ise 123 sayısının kendisidir. Bu ifadenin söz dizimsel şekeri ise şu şekildedir:

Fonksiyonlar

 Nokta yerine iki nokta (:) kullanılması, self değişkeninin fonksiyon içinde kendi kendine tanımlanmasını sağlamıştır. Böylece tablonun kendisi için başka bir parametre yazılması önlenmiş olur.

 2) Tablo

 Tablo, değerlerin saklanabildiği bir veri türü olarak bilinir.

 Tablo değerleri oluşturulurken her bir birim sonunda virgül ya da noktalı virgülden biri kullanılmalıdır. Aksi hâlde söz dizimsel bozukluğa yol açar.

 Tablo oluşturmanın birkaç yolu vardır.

 2.1) Sayısal indisli tablo

 Bu tablo türleri, 1’den başlayarak birer birer artan indisli değerler içerir.

Tablolar

 Lua’da indisler 1’den başlar. Python gibi diğer programlama dillerinde olduğu gibi 0’dan başlamadığı için karıştırılmamalıdır.

 Aşağıdaki kod parçasında, tablonun ne kadar indisinin sayma sayılarından oluştuğu “#” işareti ile bulunmuştur.

Tablolar

 2.2) Anahtar bazlı tablo

 Sayısal indisler dışında nil veri türü hariç bütün türler anahtar olarak atanabilir.

Tablolar

 2.3) Karışık tablo

 Bu tablolarda sayısal indisler de olabilir anahtarlar da. Programlamanın daha ayrıntılı konularında yapılması önerilmez.

Tablolar

 Bir Lua tablosunda en fazla 2147483647 değer yer alabilir. Her ne kadar bu limitin aşılması olanaksız görünse de bunu bilmekte fayda var.

 3) İşleçler

 3.1 Tek işlenenli işleçler

 İşlemlerde sadece bir değer kullanılır.

İşleç
Açıklama
Yazılış
Kullanım
Uzunluk
Tabloların ve karakter dizgilerinin uzunluklarını ölçer
#
#"Merhaba!"
#{}
Eksi
Önüne getirilen sayının işaretini değiştirir
-
-10

 3.2 Çift işlenenli işleçler

 İşlemlerde sadece iki değer kullanılır.

İşleç
Açıklama
Yazılış
Kullanım
Artı
İki sayıyı toplar.
+
1 + 2
Eksi
Soldaki sayıdan sağdaki sayıyı çıkarır.
-
12 - 10
Çarpı
İki sayıyı çarpar.
*
2 * 5
Bölü
Soldaki sayıyı sağdaki sayıya böler.
/
10 / 2
Modülüs (Modülo)
Soldaki sayının sağdaki sayıya bölümüyle işlemdeki kalanı döndürür (modüler aritmetik).
%
20 % 3
Üs
Sağdaki sayıyı soldaki sayının üssü olarak alır.
^
4 ^ 3
Eşittir
İki değerin birbirine eşit olup olmadığını ölçer. Eşitse doğru döndürür.
==
"2" == "2"
Eşit değildir
İki değerin birbirine eşit olup olmadığını ölçer. Eşit değilse doğru döndürür.
~=
false ~= nil
Büyüktür
Soldaki sayı sağdakinden büyükse doğru döndürür.
>
6 > 4
Küçüktür
Soldaki sayı sağdakinden küçükse doğru döndürür.
<
10 < 20
Büyük eşittir
Soldaki sayı sağdakinden büyükse ya da sağdakine eşitse doğru döndürür.
>=
20 >= 20
Küçük eşittir
Soldaki sayı sağdakinden küçükse ya da sağdakine eşitse doğru döndürür.
<=
15 <= 15
Ve
İki koşul da doğruysa doğru, öbür türlü yanlış döndürür.
and
true and false
Veya
İki koşul da yanlışsa yanlış, öbür türlü doğru döndürür.
or
false or true
Değil
Bir koşulun geçerliliğini tersine çevirir.
not
not false
Karakter dizgisi birleştirme
İki dizgiyi birleştirir.
..
"9" .. "8"

 Eksi “-” işareti iki türlü kullanılır. Birinci işlevi, bir sayının işaretini; işareti pozitif ise negatif, negatif ise pozitif yapmasıdır. Bunu bilgisayardaki karşılığı, işaret için 1 bit kullanılıp kullanılmaması durumudur. İkincisi ise verilen iki sayıdan soldaki sayıdan sağdakinin çıkarılma işlemidir.

 3.3 Harici işleç

 Tamamıyla işleç olarak kabul edemeyeceğimiz sembol grupları da var. Onlardan biri ise çift tire (⁃⁃) işaretidir. Bunun yazılmış olduğu satırlarda o işaretten satırın sonuna kadar bütün karakterler yorumlayıcı tarafından göz ardı edilir ve bu, kod akışına engel olmaz. Çift tire kullanılan satırlarda programcının o kod parçası hakkındaki yorumu söz konusudur.

 Birkaç satırlık kod yorum olarak yazılmak isteniyorsa çift köşeli parantez ( [[ ]] ) kullanılır.

 Eğer yorum içinde de köşeli parantez kullanılmak isteniyorsa eşittir işaretine ihtiyaç duyulabilir. İlk iki köşeli parantez ve son iki köşeli parantezin arasına istenilen eşit sayıda eşittir işareti konularak bu durum hâlledilir.

Yorum


Şu anda Lua programlama dilinde söz dizimi kurallarının neredeyse tamamını öğrenmiş oldunuz. Sıra, işin mantıksal kısmına geldi.

Dilin Diğer Özellikleri

 İşlem Öncelik Sırası

 Birden fazla işleç, aynı yerde kullanılabileceğinden işleçler için bir öncelik sırası belirlenmiştir. Lua’da bu işleçlerin öncelik sırası yukarıdan aşağıya doğru azalmaktadır. Bir öncekinden yukarıda olan işleçler, alttakine kıyasla işleme önce girmektedir.

Sıra
İşleç
1
^
2
not   #   -
3
*   /   %
4
+   -
5
..
6
<   >   <=   >=   ~=   ==
7
and
8
or

2. sırada yer alan eksi işareti tek işlenenli, 4. sırada yer alan eksi işareti ise çift işlenenli işlemlerde geçerlidir.

 Aşağıda birtakım işleçler aracılığı ile bir koşul oluşturulmuştur.

İşlem Öncelik Sırası

 Bu kod parçasının anlamı şu şekildedir: 5’in 3’üncü kuvvetinin 12 katının 5 fazlası 1505 sayısına eşit ise ve 5 ile 10 sayılarının çarpımının 2’ye bölümü 50 değilse bu kod parçasını yürüt.

 İşlem öncelik sırası kafa karışıklığı yaratıyorsa istenen işlemler parantez içine alınır. Parantez içine alınan işlemler, diğer işlemlerden daha önce gerçekleştirilir. Aşağıdaki kod parçası, yukarıdakinin parantezlerle ifade edilmiş biçimidir.

 İstemli Tür Değişimi

 Sayılar ve karakter dizgileri bazen karıştırılabiliyor. Örneğin sayı türünde olan bir değer ile bir dizgi olan fakat yine sayı içeren bir değerin toplanması mantıksız görünüyor fakat Lua’da işleçlerin taşıdığı anlama göre sayı ya da dizgi türleri değişebilir.

 Örneğin, toplama işaretinde dizgi içeren bir değer varsa bu değer sayıya çevrilmeye çalışılır. Eğer dizginin içinde sayıdan farklı bir sembol ya da sayı oluşturma yollarında kullanılan sembollerin dışında başka bir sembol kullanılırsa aşağıdaki kod parçası hata verir. Sayılar her zaman sayı içereceğinden dizgi birleştirme işleci kullanıldığında daima string türüne dönüşür.

 Her number, string türüne dönüşebilirken bu durum string türleri için geçerli olmayabilir.

Tür Değişimi

 Erişilmesi İmkansız Kod Parçası

return sözcüğü kullanılırken dikkat edilmesi gereken hususlardan biri şu kod parçasında gösterilmiştir:

return

 Yukarıda if then deyimi her zaman true ya da false değerlerinden birini döndürecektir. Bu deyim mantıksal olarak o kapsam dâhilinde olan kod akışını durdurur ve akış, if then deyiminin ötesine geçemez. Altı çizili olan satır da bu yüzden çizilmiştir ki asla yürütülemez. Bu yüzden bu durumlarda gereksiz satırlar silinmelidir.

 Döngüyü Kısa Aralıklarla Askıya Alma

 Döngüler betiğin önemli parçalarındandır. Çalıştıkları sürece içindeki kod bloğunu yürütürler. Döngüler kullanılırken dikkat edilmesi gereken konu, döngünün işlemciyi yormamasıdır çünkü döngüler çok hızlı bir şekilde çalıştıkları için bütün komutlar neredeyse aynı anda yerine getirilmeye çalışılır. Bu da cihazların yavaşlamasına sebep olabilir. Bunun için döngünün içine bir bekleme durumu konulmalıdır.

 Aşağıdaki kod bloğunu kesinlikle denemeyiniz!

Döngü

 Bunun yerine, bekleme durumu olan bir döngü kullanılmalıdır. Aşağıda, kare hızına bağlı olarak çalışan bir kod parçası verilmiştir. Her bir kare, ekranda işlendiği zaman Merhaba! yazdırılacaktır.

Öneriler

 İşinize yarayabilecek birkaç öneri:

  1. Programınızı oluştururken öncelikle değişken oluşturma ile başlayın. Örneğin, betikte farklı kapsamlarda farklı işlevlerde kullanılabilecek değişkenler olabilir.

  2. Olabildiğince yerel değişkenler kullanmayı benimseyin. Genel değişkenler genellikle tercih edilmezler.

  3. Farklı deyim türlerine karşılık gelen ifadelerin arasına en az bir yeni satır karakteri ekleyebilirsiniz. Bu, ileri bir zamanda betiği okumanızda yardımcı olacaktır.

  4. Her bir satıra sadece bir birim yazmaya özen gösterin. Örneğin, bir satırda birden fazla print fonksiyonu kullanmak yerine bunlar, yeni satırlara yazılabilir.

  5. Fonksiyon tanımlamada genellikle fonksiyonun söz dizimsel şeker hâli yazılır fakat fonksiyon çağırmanın söz dizimsel şekeri, programcılar tarafından arka plana atılır.

  6. Noktalı virgül işaretini sadece gerektiği yerde kullanın. İşaretin kullanılmaması, betiğinizin çalışamaması anlamına gelmez. Birimler, Lua tarafından otomatik olarak algılanabilmektedir.

  7. Şart deyimlerinde kondisyon sağlanırken doğruluk değerleri ve nil değeri, kelime olarak yazılmayabilir. Bunun nedeni, deyimdeki her bir şartın Lua’da true ya da false değerlerinden birine eşit olmasıdır. Doğruluk değerleri ve nil değeri, kesinkes karşılaştırılmak isteniyorsa yazılmalıdır.

Koşul Koşul

  1. Semboller, tek işlenenli işlemlerde kendinden sonra gelen karakterlere bitişik; çift işlenenli işlemlerde kendinden önce ve sonra gelen karakterlerden en az birer boşluk bırakılacak şekilde yazılabilir. Bu sayede, işleçlerin hangi görevde kullanıldığı bilinmiş olur.

  2. Farklı kapsamlarda tanımlı değişkenler aynı işlevi görüyorsa bu değişkenler, bir üst kapsamda ortak değişkene alınabilir. İşlevleri farklıysa yine farklı kapsamlarda tanımlanmalıdır.

  3. Yeni bir kapsama geçtiğinizde o kapsam için her birimde en az 2, en fazla 4 karakterlik boşluk bırakılması önerilir. Stüdyo, bunu varsayılan 4 karakterlik boşlukla yapar.

  4. Betiğiniz çok karmaşıksa veya programcılar arasında iş birlikçi düzenleme yapılıyorsa, kod parçasının ne yaptığına dair yorumlar ekleyebilirsiniz. Gelecekte gerçekleştirmeyi düşündüğünüz bir konu varsa yorum kısmına “TODO” kelimesini ekleyebilirsiniz. Zaman içinde stüdyoda bu kelimeyi aratarak betiklerinizde yapmayı düşündüğünüz işlere göz atabilirsiniz.

Yorum

  1. Betiğinizin çok fazla karakterden oluştuğunu düşünüyorsanız, performans açısından düşüş yaşadığınızı hissediyorsanız betiğinizi farklı betiklere ayırmayı düşünün.

Kapanış

Bu materyalde olabildiğince Türkçe kelimeler kullanılmaya çalışılıp Türkçemize uygun bir şekilde biçemiyle bir altyapı, içeriğiyle sağlam bir makale oluşturulmuştur. Bu sayede bu makale; Türk olan, Türkçe konuşan geliştiricilere rahatlıkla ulaşmış olur.

Okuduğunuz için teşekkürlerimi sunuyorum. Bütün emeğim, etkisini asırlar boyu sürdüren teknolojinin öğrenimi ve öğretiliş aşamasını ilerletmek üzerinedir. Umarım, anlattıklarım faydalı olmuştur.

İyi günler ve mutlu kodlamalar!


5 Likes

Alıştırma 1

Zorluk: Kolay

Soru 1: 1’den 1000’e kadar (1 ve 1000 dâhil) olan tam sayıların toplamını yazdıran kodlardan biri nasıl yazılır? Bu kod yazılırken en az bir tane döngü kullanılmalı ve sayılar birer birer toplanmalıdır.

Hatırlatmalar

Döngü türlerinden olan for, while, repeat kullanılabilir.
Yazdırmak için print fonksiyonu kullanılır.

Çözümler

Çözümlerden hepsinde her türlü değişken oluşturma yolu kullanılabilir.

Bu çözümlerden en verimsiz olan, 1000 değişkene sayıları atayıp hepsini toplamaktır. Bu yöntem kullanılsa bile doğru sonuç alınmayabilir çünkü aynı kapsamda 1000 değişken oluşturmaya çalışırsanız kodunuz hata verebilir. Aşağıdaki kod söz dizimsel olarak doğru olsa da kısıtlamalar olduğu için çalışamaz.

least1

Repeat ve while döngüleri kullanmak daha mantıklı bir yaklaşımdır.

repeat1
while1

En etkili kullanım ise for döngüsüyle yapılır. En az değişken burada kullanılmış olur.

for1

Matematiksel formüller kullanmadan sonucun ne geldiğini kodlar sayesinde öğrenebilirsiniz.

Soru 2: Lua’da yapılacak bazı işlemler kullanılan işleçler vardır. Çarpma, çıkarma, toplama, bölme, üs alma işlemlerini gerçekleştiren işleçleri aynı sırayla gösterin ve bu işleçlerin öncelik sırasını belirtin.

Çözüm

Bu işlemler için sırasıyla “*”, “-”, “+”, “/”, “^” işleçleri kullanılır. Bu işleçlerin işlemlerde öncelikli olarak kullanılma sırası ise “^”, “*”, “/”, “+”, “-” şeklinde olup kendi aralarında aynı öncelik sırasına sahip olan bölme ve çarpma, çıkarma ve toplama işleçlerinde öncelik, sol tarafta yazandadır.

Soru 3: Aşağıdaki betikte yer alan kod ne işe yaramaktadır?

kontrol

Çözüm

Yerel değişken olarak tanımlanmış kontrolEt fonksiyonuna bir sayı verildiğinde bu sayının tek ya da çift sayı olup olmadığı belirlenir. Sayının 2 sayısına bölünmesiyle elde edilen kalan 1 ise sayının tek, 0 ise çift olduğu anlaşılır. Bu da modulo işleciyle yapılır çünkü bu işleç, kalan bulma işlemini gerçekleştirir.

Fonksiyona verilen sayı tam sayı olmalıdır. Fonksiyon, çift tam sayılar dışındaki bütün sayılar için false döndürür.

3 Likes