Ana içeriğe atla

Scala Trait’leri

Sözdizimsel örnekler yardımıyla Scala’da trait’lerin kullanımını öğrenin.
Güncel 3 Eki 2026  · 6 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

DataCamp kısa süre önce ilk Scala kursunu başlattı: Scala’ya Giriş. Göz atın!

Aşağıdaki eğitimleri okumakla da ilgilenebilirsiniz:

Giriş

Trait, nesne yönelimli programlamada ağırlıklı olarak kullanılan ve bir sınıfın işlevselliğini bir dizi yöntemle genişletebilen bir kavramdır.

Trait’ler, ruhu itibarıyla Java programlama dilindeki arayüzlere benzer. Bir sınıfın aksine, Scala trait’leri somutlaştırılamaz ve hiçbir argüman ya da parametre almaz. Ancak, sınıflar ve nesneler kullanılarak bunlardan kalıtım (extend) alınabilir. Öyle ki trait’ler, bir sınıfa davranış kazandıran belirli bir yöntem/fonksiyon kümesi sunar ve bu davranışı özelleştirmek için sınıfın belirli yöntemleri uygulamasını bekler.

Bir nesneyi tanımlamak için kullanılan trait, çoklu kalıtım gerektirmeden farklı sınıflar tarafından kullanılabilecek yöntemlerin bir karması olarak oluşturulur. Ancak, iki trait’in aynı ada sahip bir yönteme (ad çakışması) sahip olduğu ve bunların bir sınıf tarafından kullanılması gereken istisnalar olabilir; bu durumda belirsizlik açıkça giderilmelidir.

Trait’ler, üyeleri olarak hem soyut hem de soyut olmayan yöntemler ve alanlara sahip olabilir. Bir trait’te bir yöntemi başlatmazsanız (tanımlamazsanız) bunlar soyut olur; başlatılanlar ise soyut olmayan olarak adlandırılır. Soyut yöntemlerde, trait’i uygulayan sınıf başlatmayı üstlenir.

Şimdi, bazı örneklerin yardımıyla Scala trait’lerini hızlıca anlayalım!

Scala Trait Sözdizimi

Scala trait’inin sözdizimi basittir; trait anahtar sözcüğünün ardından trait’in adı gelir.

trait Trait_Name{
// Variables
// Methods
}
scala trait syntax


Yukarıdaki trait tanımından da görebileceğiniz gibi, içinde hiçbir değişken ve yöntem tanımlanmamış DataCamp adlı bir trait tanımlanmıştır.

Gelin, Scala trait’lerine basit bir örnekle geçelim; bu, programatik olarak nasıl çalıştıkları konusunda size daha fazla netlik kazandıracaktır.

Giriş bölümünde tartışıldığı gibi, Scala Trait’leri bir sınıf tarafından extends anahtar sözcüğü kullanılarak kalıtılır.

class Scala_Tutorial extends DataCamp{
// Variables
// Methods
}

Scala_Course adlı bir trait tanımlayalım; bu trait, DataCamp sınıfı tarafından kalıtılacaktır. trait içinde, DataCamp sınıfında tanımlanacak scala() adlı bir soyut yöntem tanımlayacaksınız.

trait Scala_Course{  
    def scala()  
}  

class DataCamp extends Scala_Course{  
    def scala(){  
        println("DataCamp has recently launched there first Scala course")  
    }  
}  

object Main{  
    def main(args:Array[String]){  
        var a = new DataCamp()  
        a.scala()  
    }  
}

Şimdi yukarıdaki kodu çalıştıralım.

example


Yukarıdaki örnekte, scala() yöntemi soyuttu; bu nedenle, bu trait’i kalıtım yoluyla alan sınıfta bildirim yapıldı.

Peki, trait’te zaten uygulanmış (soyut olmayan) bir yönteminiz varsa ne olur? Bu durumda, bu trait’i genişleten sınıfın, trait’te zaten uygulanmış olan yöntemi yeniden uygulamasına gerek yoktur.

Bunu küçük bir örnekle anlayalım.

trait BMW{

    // trait variables
    var make: String = "BMW"
    var model: String = "X7"
    var fuel: Int = 40

    // trait method: NON-ABSTRACT
    def Display()
    {
        println("Make of the Car : " + make);
        println("Model of the Car : " + model);
        println("Fuel capacity of the Car : " + fuel);
    }
}


class Car extends BMW{
    // class variables
    var make1: String = "Mercedes Benz"
    var model1: String = "S350D"
    var fuel1: Int = 50

    // Class method
    def Merc_Specs()
    {
        println("Make of the Car : " + make1);
        println("Model of the Car : " + model1);
        println("Fuel capacity of the Car : " + fuel1);
    }
}

object Main  
{

    // Main method
    def main(args: Array[String])  
    {

        // Class object
        var obj = new Car();
        println("Calling the Class Method")
        obj.Merc_Specs();
        println("Calling the Trait Method")
        obj.Display();
    }
}

Yukarıdaki kodu çalıştıralım:

example


Artık soyut ve soyut olmayan yöntemler arasındaki farkı anladığınıza göre, soyut bir yöntem, onu kalıtım yoluyla alan veya genişleten sınıfta uygulanmazsa neler ters gidebilir, buna bakalım.

Bu kavramı anlamak için aynı örneği kullanalım.

trait Scala_Course{  
    def scala()  
}  

class DataCamp extends Scala_Course{  
    def print(){  
        println("Error: Class DataCamp needs to be Abstract")  
    }  
}  

object Main{  
    def main(args:Array[String]){  
        var a = new DataCamp()  
        a.print()  
    }  
}

Yukarıdaki kodu çalıştırmak, aşağıda gösterildiği gibi bir hatayla sonuçlanır; çünkü trait yöntemi scala() (soyut) onu kalıtım yoluyla alan sınıfta tanımlanmadı.

example

Yukarıdaki kodu çalışır hale getirmek için iki olası çözüm vardır:

  • DataCamp sınıfında scala() yöntemini tanımlayın veya
  • DataCamp sınıfını abstract olarak tanımlayın.

Bugünkü eğitimin son konusu, tek bir sınıfta birden fazla trait’i nasıl kalıtabileceğiniz. Hızla tamamlayalım.

trait A{
// methods
}
trait B{
// methods
}
class C extends A with B{
}
trait BMW{


    var make: String = "BMW"
    var model: String = "X7"
    var fuel: Int = 40
}

trait Merc{


    var make1: String = "Mercedes Benz"
    var model1: String = "S350D"
    var fuel1: Int = 50


}



class Car extends BMW with Merc{

    def BMW_Specs()
    {
        println("Make of the Car : " + make);
        println("Model of the Car : " + model);
        println("Fuel capacity of the Car : " + fuel);
    }


    def Merc_Specs()
    {
        println("Make of the Car : " + make1);
        println("Model of the Car : " + model1);
        println("Fuel capacity of the Car : " + fuel1);
    }

}


object Main  
{

    // Main method
    def main(args: Array[String])  
    {

        // Class object
        var obj = new Car();
        println("Calling the BMW Trait")
        obj.BMW_Specs();
        println();
        println("Calling the Merc Trait")
        obj.Merc_Specs();
    }
}

Son olarak, yukarıdaki kodu çalıştıralım.

example

Tebrikler!

Bu eğitimi tamamladığınız için tebrikler.

Artık programlamada Trait’lerin ne olduğunu ve Scala’da nasıl kullanılacağını biliyorsunuz. Sizin için iyi bir alıştırma, soyut bir yöntemin, onu kalıtım yoluyla alan sınıfta tanımlanmadığı durumda bir çözüm bulmak olabilir. Aynısı için kod yazmayı deneyin ve kodun derleme hatası olmadan çalışıp çalışmadığını görün. Küçük bir ipucu: Scala’daki Soyut Sınıflara bakmak isteyebilirsiniz.

Bu eğitimle ilgili her türlü sorunuzu aşağıdaki yorumlar bölümünde sormaktan çekinmeyin.

Son olarak, DataCamp’teki yeni Scala kursunu unutmayın: Scala’ya Giriş.

Konular
Scala

Scala Kursları

Kurs

Introduction to Scala

3 sa
27.1K
Begin your journey with Scala, a popular language for scalable applications and data engineering infrastructure.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör