İçindekiler
İşlevler, bildirimlerin ve ifadelerin soyutlanması için ana mekanizmadır. Lua, çoğunlukla diğer dillerde prosedürler veya alt rutinler olarak adlandırılan belirli görevleri gerçekleştirebilirler.Fonksiyonlar çoğu zaman parantez ve belirli bir eylemi gerçekleştirmesine izin verecek bir argüman listesi ile yazılır, bu fonksiyonların argüman gerektirmediği durumlarda olabilir, ancak parantezlerin belirtilmesi gerekir, bir örnek görelim içinde ifade olarak kullandığımız fonksiyonların Lua:
Gördüğümüz gibi, fonksiyonları her iki şekilde de tanımlayabiliriz, ancak fonksiyonun tek bir argümana sahip olduğu ve bu argümanın bir argüman olduğu özel bir durum vardır. dize değişmezi veya bir tablo veya dizi için bir kurucu, bu durumda parantezler isteğe bağlıdır, bakalım:
yazdır "Merhaba Dünya" yazdır ("Merhaba Dünya") dofile 'file.lua' dofile ('file.lua') yazdır [[çok satırlı dizi msj]] yazdır ([[çok satırlı dizi msj]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) tür {} tür ({})Örneğe göre, fonksiyonları her iki şekilde de yazabildik, bunlar eşit derecede geçerlidir.
içinde bir program Lua Hem C'de hem de dilin kendisinde tanımlanmış işlevleri kullanabilirsiniz, örneğin, kütüphanedeki tüm standart işlevler. Lua içinde yazılır C, geliştiriciler için geçerli değildir, çünkü her ikisinin de çağrılması arasında herhangi bir fark yoktur.
Bunu bilerek, tanım diğer dillerden farklı değildir, bir işlevin geleneksel sözdizimi, işlevin adı, bir parametre listesi ve bir bildirimler listesi olan işlevin gövdesi tarafından yönetilir, bir örnek görelim. açıkladıklarını göster:
fonksiyon işlemi (var) yerel toplam = 0 toplam = var + 6 dönüş toplam bitişZaten fonksiyonumuz var, ancak bu şekilde çok kullanışlı değil, çünkü ihtiyaç duyduğu parametreyi göndererek çağrılması gerekiyor, bunun için onu çağırmak için kodumuza bir satır daha ekleyebiliriz:
işlev işlemi (var) yerel toplam = 0 toplam = var + 6 dönüş toplam bitiş yazdırma (işlem (57))Örneğimizi terminalimizde çalıştırırsak, programımızın parametreyi nasıl aldığını görebiliriz ve fonksiyonumuzda tanımlanan işlemlere göre bir değer döndürür:
BÜYÜT
İçindeki işlevlerden vurgulayabileceğimiz bir şey Lua, parametrelerin fonksiyon çağrısında aldıkları değerlerle başlatıldıkları için yerel değişkenler olarak çalışmasıdır. Bunun yanı sıra, işlevde tanımlanmış farklı sayıda argümana sahip bir işlevi çağırabiliriz, Lua buna, son öğreticide ele aldığımız, fazladan argümanların atıldığı ve ekstra parametrelerin değer türünü aldığı çoklu atama ile yaptığı şekilde uyum sağlar. sıfır, örneğin aşağıdaki fonksiyona sahip olduğumuzu düşünelim:işlev çoklu_işlev (a, b) a veya b sonu döndürAşağıdaki kod kısmında farklı parametrelerle fonksiyonu nasıl çağırdığımızı ve sağ tarafta atamanın nasıl yapıldığını görelim:
f (8) a = 8, b = nil f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (4 değeri atılır)Bu davranış, programlama hatalarına yol açabilse de, özellikle varsayılan argümanlar için de yararlıdır.
Alışılmadık ama oldukça kullanışlı bir özellik Lua, birden çok sonuç döndürme yeteneğidir, önceden tanımlanmış dil işlevleri bile bunu yapabilir. Bunun bir örneği fonksiyondur string.find, verilen bir dizgede bir oluşum kalıbı arayan bu fonksiyon iki indeks döndürür, birincisi bu kalıbın başladığı ve ikincisi bittiği yer, bu fonksiyonun kullanabileceğimiz pratik bir örneğini görelim. etkileşimli konsolumuzda mükemmel şekilde yapın:
Yazdığımız fonksiyonlar Lua onlar da dönebilir birden çok sonuç, bunun için onları yalnızca geri döndükten sonra listelememiz gerekiyor, bir dizideki öğelerin en büyüğünü ve onun içindeki konumunu bulmak için bir işlev oluşturduğumuz bir örnek görelim:
fonksiyon maksimum değer (a) yerel minimum = 1 yerel m = i için a [minimum], ipairs'de val (a) do ise val> m sonra minimum = i; m = val bitiş bitiş dönüşü m, minimum bitiş baskısı (maksimum değer ({8,10,23,12,5}))Gördüğümüz gibi, fonksiyonumuz oldukça basit ve dönüşümüzde iki değer döndürüyor, bu durumda gönderdiğimiz şeye göre en büyük sayı olarak 23 ve konum olarak 3 döndürmeliyiz, bakalım:
BÜYÜT
Birden çok sonuç döndürme işlevine ek olarak, Lua ayrıca alabilirsiniz değişken sayıda argüman, örneğin öğreticiler boyunca işlevi kullandık Yazdır bir, iki ve en fazla üç argümanla, yani değişken sayıda argüman alabilir, ancak bu yaptığı gibi, geliştirdiğimiz fonksiyonlar da alabilir. Lua, Buna bir örnek verelim:function örnek_fonksiyon (…) yerel s = 0 i için, ipairs'de v {…} do s = s + v end return s end print (example_function (8, 19, 30, 14, 10))Eğer fonksiyonumuzun tanımında gözlemcilersek, üç nokta (… ) parantez içinde bu, fonksiyonumuzun değişken sayıda argümanı kabul ettiğini ve fonksiyon çağrıldığında gönderilen tüm argümanların dahili olarak toplandığını ve daha sonra fonksiyon ile işlendiğini gösterir. ipairsKendisine gönderilen tüm argümanları eklemekten sorumlu olan fonksiyonumuzun çıktısını görelim:
BÜYÜT
Bu özelliği gördüğümüz gibi Lua Ona kaç tane argüman ileteceğimizi bilmeden fonksiyonumuzu tanımlamamıza izin verdiği için oldukça kullanışlıdır, hatta bu fonksiyonun fonksiyon ile yapılana biraz benzer olduğunu söyleyebiliriz. hazırlanan ifadeler gibi dillerde Veritabanı ile işlemleri işlemek için PHP veya Java.Argümanları gönderme Lua konumsaldır, yani bir işlevi çağırdığımızda, bu argümanlar konumlarına göre parametrelere karşılık gelir, ilk argüman ilk parametreye karşılık gelir ve bu şekilde devam eder, ancak bazen argümanları adıyla belirtmekten zarar gelmez.
Bu işlevsellik, değişken argümanlara benzer, ancak argümanlarımız için isimleri tanımlarken, onları kullanmak çok daha basittir, burada sadece bir tablo veya düzenleme kullanarak bu işlevi yapabiliriz, bu, fonksiyonumuz bu parametrelerden bazılarını kullanıyorsa çok faydalı bir şeydir. isteğe bağlı olarak, bir pencere oluşturmak için belirli miktarda parametre alan bir işleve aşağıdaki çağrıyı görelim:
create_window {x = 0, y = 0, genişlik = 0, yükseklik = 200, başlık = 'Lua Penceresi', arka plan = "mavi", kenarlıklar = doğru}Bu şekilde fonksiyon create_window Dilerseniz bu argümanları ismen kontrol etmekte özgürsünüz, bu argümanları fonksiyonumuzda nasıl aldığımızı ve bununla neler yapabileceğimizi görelim:
create_window (seçenekler) - type (options.title) ~ = "string" sonra error ("başlık yok") ise, elseif type (options.width) ~ = "number" sonra error ("genişlik ölçüsü yok" ise zorunlu seçenekleri kontrol edin ) elseif type (options.height) ~ =" number "then error (" yükseklik ölçümü yok ") end - create_window seçeneklerini uygularız (options.title, options.x veya 0, options.y veya 0, options .width, options.height, options.background veya "white", options.edges) BitişGördüğümüz gibi, bu işlevsellik ile programlarımızdaki olanaklar çok daha fazladır ve bu örnek açıklayıcı olmasına rağmen, adlandırılmış argümanları fonksiyonlarımız içinde nasıl uygulayabileceğimizi görmemizi sağlar.
Fonksiyonları nasıl kullanacağımızı öğrendiğimiz bu öğreticiyi bu şekilde sonlandırıyoruz. Lua, diğer dillerde bulabileceğimiz konvansiyonel söz diziminden, çoklu sonuç, değişken argümanlar ve fonksiyonlarımıza gönderdiğimiz argümanları isimlendirme gibi dilin özelliklerine kadar. Bu şekilde, bu tür özellikleri dahil ederek programlarımıza çok daha fazla güç katıyor ve kullanım kolaylığı sağlıyor. Lua biz buna alışkınız.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.