Lewati ke konten utama

Trait Scala

Pelajari penggunaan trait di Scala dengan bantuan contoh sintaksis.
Diperbarui 28 Sep 2026  · 6 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

DataCamp baru saja meluncurkan kursus Scala pertama mereka: Introduction to Scala. Coba lihat!

Anda juga mungkin tertarik membaca tutorial berikut:

Pendahuluan

Trait adalah konsep yang banyak digunakan dalam pemrograman berorientasi objek, yang dapat memperluas fungsionalitas suatu kelas menggunakan sekumpulan metode.

Trait mirip dengan interface dalam bahasa pemrograman Java. Tidak seperti kelas, trait Scala tidak dapat diinstansiasi dan tidak memiliki argumen atau parameter. Namun, Anda dapat mewarisinya (extend) menggunakan kelas dan objek. Dengan demikian, trait menyediakan sekumpulan metode/fungsi spesifik yang menjalankan perilaku pada sebuah kelas dan mengharapkan kelas tersebut mengimplementasikan sekumpulan metode yang kemudian memparametrisasi perilaku yang disediakan.

Trait yang digunakan untuk mendefinisikan sebuah objek dibuat sebagai campuran metode yang dapat digunakan oleh berbagai kelas tanpa memerlukan pewarisan berganda. Namun, bisa ada pengecualian ketika dua trait memiliki metode dengan nama yang sama (tabrakan penamaan), yang harus digunakan oleh sebuah kelas; dalam kasus tersebut, ambiguitas harus diselesaikan secara eksplisit.

Trait dapat memiliki metode, field abstrak maupun non-abstrak sebagai anggotanya. Ketika Anda tidak menginisialisasi sebuah metode dalam trait, maka metode tersebut bersifat abstrak, sedangkan yang diinisialisasi disebut non-abstrak. Pada metode abstrak, kelas yang mengimplementasikan trait bertanggung jawab atas inisialisasinya.

Sekarang, mari cepat memahami trait Scala dengan bantuan beberapa contoh!

Sintaks Trait Scala

Sintaks trait Scala cukup sederhana, didefinisikan oleh kata kunci trait diikuti oleh nama trait.

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


Seperti yang Anda lihat dari definisi trait di atas, sebuah trait bernama DataCamp didefinisikan, yang tidak memiliki variabel dan metode di dalamnya.

Mari beralih ke contoh sederhana trait Scala, yang akan memberi Anda gambaran yang lebih jelas tentang cara kerjanya secara programatis.

Seperti dibahas dalam pendahuluan, Trait Scala diwarisi oleh sebuah kelas menggunakan kata kunci extends.

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

Mari kita definisikan sebuah trait bernama Scala_Course, yang akan diwarisi oleh kelas DataCamp. Di dalam trait, Anda akan mendefinisikan metode abstrak bernama scala(), yang akan didefinisikan dalam kelas DataCamp.

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()  
    }  
}

Sekarang mari kita jalankan kode di atas.

contoh


Pada contoh di atas, metode scala() adalah metode abstrak, sehingga deklarasinya dibuat dalam kelas yang mewarisi trait tersebut.

Lalu bagaimana jika Anda memiliki metode (non-abstrak) yang sudah diimplementasikan dalam trait? Dalam hal ini, kelas yang mewarisi trait tersebut tidak perlu mengimplementasikan metode yang sudah diimplementasikan di trait.

Mari pahami ini dengan bantuan contoh kecil.

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();
    }
}

Mari jalankan kode di atas:

contoh


Sekarang setelah Anda memahami perbedaan antara metode abstrak dan non-abstrak, mari lihat apa yang bisa salah ketika metode abstrak tidak diimplementasikan dalam kelas yang mewarisi atau memperluasnya.

Mari gunakan contoh yang sama untuk memahami konsep ini.

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()  
    }  
}

Menjalankan kode di atas menghasilkan error, seperti yang ditunjukkan di bawah, karena Anda tidak mendefinisikan metode trait scala() (abstrak) dalam kelas yang mewarisinya.

contoh

Untuk membuat kode di atas berjalan, ada dua solusi yang mungkin:

  • Definisikan metode scala() dalam kelas DataCamp atau
  • Jadikan kelas DataCamp sebagai abstract.

Topik terakhir untuk tutorial hari ini adalah bagaimana Anda dapat mewarisi beberapa trait dalam satu kelas. Jadi, mari kita selesaikan dengan cepat.

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();
    }
}

Terakhir, mari jalankan kode di atas.

contoh

Selamat!

Selamat telah menyelesaikan tutorial ini.

Sekarang Anda tahu apa itu Trait dalam pemrograman dan cara menggunakannya di Scala. Latihan yang baik untuk Anda adalah mencari solusi untuk metode abstrak ketika tidak didefinisikan dalam kelas yang mewarisinya. Cobalah menulis kode untuk hal yang sama dan lihat apakah kode berjalan tanpa error kompilasi. Sedikit kiat, Anda mungkin ingin melihat Kelas Abstrak di Scala.

Silakan ajukan pertanyaan apa pun terkait tutorial ini di kolom komentar di bawah.

Terakhir, jangan lupa mengikuti kursus Scala baru di DataCamp, Introduction to Scala.

Topik
Scala

Kursus Scala

Kursus

Introduction to Scala

3 jam
27.2K
Begin your journey with Scala, a popular language for scalable applications and data engineering infrastructure.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya