0Pricing
Lua Academy · Ders

require İşlevi

require ile harici modülleri yükleyin ve modül önbelleğe almasını anlayın.

require İşlevi, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

require Nasıl Çalışır?

require(modname) bir modülü yükleyip döndürür. Bir .lua dosyası için package.path içinde, bir C kütüphanesi için package.cpath içinde arama yapar. Sonuç package.loaded[modname] içinde önbelleğe alınır; sonraki çağrılar dosyayı yeniden çalıştırmadan önbelleğe alınmış değeri döndürür.

-- First require: loads and executes math_utils.lua
local math_utils = require("math_utils")

-- Second require: returns cached value (file not re-run)
local math_utils2 = require("math_utils")

print(math_utils == math_utils2)   -- true (same object)
print(package.loaded["math_utils"] == math_utils)  -- true

Modülün Dönüş Değeri

Bir modül dosyası bir değer döndürmelidir; bu genellikle işlevlerden oluşan bir tablodur. require işlevinin çağırana verdiği değer budur. Dosya hiçbir şey döndürmezse (veya true döndürürse), require da bunu döndürür.

-- mymodule.lua:
-- local M = {}
-- function M.hello() print("Hello from module!") end
-- return M

-- In main script:
local m = require("mymodule")
m.hello()   -- Hello from module!

-- The module table is the interface

package.loaded ile Önbelleğe Alma

package.loaded, modül adlarını yüklenmiş değerleriyle eşleyen bir tablodur. Bir sahte nesneyi önceden yüklemek için bir girdiyi elle ayarlayabilir veya yeniden yüklemeyi zorlamak için nil yapabilirsiniz (modül dosyası sonraki require çağrısında yeniden çalıştırılır).

-- Force reload by clearing cache
package.loaded["mymodule"] = nil
local fresh = require("mymodule")  -- re-executes the file

-- Preload a mock for testing
package.loaded["db"] = {
  query = function() return {} end,
  close = function() end,
}
local db = require("db")  -- gets the mock

package.path Biçimi

package.path, noktalı virgülle ayrılmış bir örüntü listesidir. ? yer tutucusu modül adıyla değiştirilir (modül adındaki noktalar yol ayırıcılarına dönüştürülür). package.path başına ekleyerek aranacak dizinler ekleyebilirsiniz.

print(package.path)
-- typically: ./?.lua;./?.luac;/usr/share/lua/5.4/?.lua;...

-- Add local lib directory
package.path = "./lib/?.lua;" .. package.path

-- Now require("utils") will look in ./lib/utils.lua

require, dofile ve loadfile Karşılaştırması

require: önbelleğe alır ve package.path içinde arar. dofile(path): bir dosyayı hemen çalıştırır, önbelleğe almaz ve doğrudan yol alır. loadfile(path): derler ancak çalıştırmaz, bir işlev döndürür. Modüller için require, tek seferlik betikler için dofile kullanın.

-- dofile: no caching, direct path
dofile("./scripts/setup.lua")

-- loadfile: compile only, returns function
local fn, err = loadfile("./config.lua")
if fn then
  local result = fn()   -- execute when ready
end

-- require: best for modules
local json = require("json")

Dizinler için Noktalı require Kullanımı

Alt dizinlerdeki dosyalara başvurmak için modül adlarında noktalar kullanın. require("utils.string"), utils/string.lua yoluna eşlenir (yol örüntüsündeki ? ile). Çok dosyalı kütüphaneler bu şekilde düzenlenir.

-- Directory structure:
-- lib/
--   utils/
--     string.lua
--     table.lua
--   init.lua

package.path = "./lib/?.lua;" .. package.path

local strUtils = require("utils.string")   -- loads lib/utils/string.lua
local tblUtils = require("utils.table")    -- loads lib/utils/table.lua

Modül Başlatmasının Yan Etkileri

Modül dosyaları ilk require edildiğinde bir kez çalıştırılır. En üst düzeydeki (işlevlerin dışındaki) tüm kod, require zamanında çalışır. Bu, tek seferlik başlatma için kullanışlıdır; ancak ağ bağlantıları veya dosya işlemleri gibi yan etkilerin içe aktarma sırasında çalıştığına dikkat edin.

-- counter.lua:
-- local count = 0   -- initialized once on first require
-- local M = {}
-- function M.increment() count = count + 1 end
-- function M.get() return count end
-- return M

local c = require("counter")
c.increment()
c.increment()
print(c.get())   -- 2

local c2 = require("counter")
print(c2.get())  -- 2 (same instance, cached)

require İçinde Hata İşleme

Bir modül dosyasında söz dizimi hatası varsa veya yükleme sırasında hata fırlatırsa require bir hata oluşturur. Hata mesajı modül adını ve dosyanın içindeki hatayı içerir. Modül yükleme başarısızlıklarını düzgünce ele almak için pcall kullanın.

local ok, mod = pcall(require, "possibly_missing")
if not ok then
  print("Module not available:", mod)
  -- fall back to alternative or default implementation
  mod = {feature = function() return "fallback" end}
end

print(mod.feature())

package.preload

package.preload, modül adına göre yükleyici işlevleri kaydedebileceğiniz bir tablodur. require("name") çağrıldığında Lua önce preload tablosunu denetler. Bu sayede dosya olmadan modüller kaydedebilirsiniz; bu, gömülü Lua veya test işlemleri için kullanışlıdır.

package.preload["mymath"] = function()
  return {
    double = function(n) return n * 2 end,
    triple = function(n) return n * 3 end,
  }
end

local m = require("mymath")
print(m.double(5))   -- 10
print(m.triple(5))   -- 15

Döngüsel yükleme

Döngüsel bağımlılıklar (A, B'yi gerektirir; B de A'yı gerektirir) kısmen işlenir: Lua, modülü çalıştırmadan önce package.loaded içine true yer tutucusunu kaydeder. B, A'nın henüz tamamlanmamış tablosunu kullanmaya çalışırsa eksik sonuçlar alabilir. Modül tasarımında döngüsel bağımlılıklardan kaçının.

-- a.lua: local b = require("b"); local M = {}; M.name = "A"; return M
-- b.lua: local a = require("a"); print("a.name:", a.name); return {}

-- When a.lua is loaded:
-- 1. a starts executing
-- 2. requires b -> b starts executing
-- 3. b requires a -> gets partial a (still loading!)
-- 4. a.name may be nil at step 3

print("Avoid circular requires in module design")

Hızlı Kontrol

require("mod") işlevini ikinci kez çağırdığınızda ne olur?

Özet: require

Özet:

  • require(name) yalnızca bir kez yükler ve package.loaded içinde önbelleğe alır
  • Modül dosyası, genel kullanıma açık arayüzünü (genellikle bir tablo) döndürür
  • Yeniden yüklemeyi zorlamak için package.loaded[name] değerini temizleyin
  • Özel arama dizinleri için package.path içine ekleme yapın
  • Bellek içi modüller için package.preload kullanın
  • Döngüsel bağımlılıklardan kaçının

Sıkça Sorulan Sorular

“require İşlevi” dersi ücretsiz mi?

Evet — “require İşlevi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“require İşlevi” dersinde ne öğreneceğim?

require ile harici modülleri yükleyin ve modül önbelleğe almasını anlayın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“require İşlevi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. require İşlevi
  2. Bir Modül Dosyası Yazma
  3. package.path ve package.cpath
  4. Modül Örüntüleri ve En İyi Uygulamalar
← Lua Academy Sayfasına Dön