CoffeeScript - Kelas dan Warisan

JavaScript tidak menyediakan classkata kunci. Kita dapat mencapai pewarisan dalam JavaScript menggunakan objek dan prototipe mereka. Setiap objek memiliki prototipe mereka sendiri dan mereka mewarisi fungsi dan properti dari prototipe mereka. Karena prototipe juga merupakan objek, ia juga memiliki prototipe sendiri.

Meskipun warisan prototipe jauh lebih kuat daripada warisan klasik, hal itu sulit dan membingungkan bagi pengguna pemula.

Kelas di CoffeeScript

Mengatasi masalah ini, CoffeeScript menyediakan struktur dasar yang disebut classyang dibangun menggunakan prototipe JavaScript. Anda dapat menentukan kelas di CoffeeScript menggunakan kata kunci kelas seperti yang ditunjukkan di bawah ini.

class Class_Name

Contoh

Perhatikan contoh berikut, di sini kami telah membuat kelas bernama Student menggunakan kata kunci class.

class Student

Jika Anda mengkompilasi kode di atas, itu akan menghasilkan JavaScript berikut.

var Student;

Student = (function() {
  function Student() {}

  return Student;

})();

Instansiasi kelas

Kita dapat membuat instance kelas menggunakan operator baru seperti bahasa pemrograman berorientasi objek lainnya seperti yang ditunjukkan di bawah ini.

new Class_Name

Anda dapat membuat instance kelas (Mahasiswa) yang dibuat di atas menggunakan new operator seperti yang ditunjukkan di bawah ini.

class Student
new  Student

Jika Anda mengkompilasi kode di atas, itu akan menghasilkan JavaScript berikut.

var Student;

Student = (function() {
  function Student() {}

  return Student;

})();

new Student;

Mendefinisikan Pembuat

Konstruktor adalah fungsi yang dipanggil saat kita membuat instance kelas, tujuan utamanya adalah untuk menginisialisasi variabel instan. Di CoffeeScript, Anda dapat menentukan konstruktor hanya dengan membuat fungsi dengan namaconstructor seperti gambar dibawah.

class Student
  constructor: (name)->
  @name = name

Di sini, kami telah mendefinisikan konstruktor dan menetapkan nama variabel lokal ke variabel instan.

Itu @ operator adalah alias dari this kata kunci, ini digunakan untuk menunjukkan variabel instan suatu kelas.

Jika kita menempatkan @sebelum argumen konstruktor, maka itu akan ditetapkan sebagai variabel instan secara otomatis. Oleh karena itu, kode diatas dapat ditulis sederhana seperti gambar dibawah

class Student
  constructor: (@name)->

Contoh

Berikut adalah contoh konstruktor di CoffeeScript. Simpan di file dengan namaconstructor_example.coffee

#Defining a class
class Student
  constructor: (@name)->

#instantiating a class by passing a string to constructor
student = new Student("Mohammed");
console.log "the name of the student is :"+student.name

Compiling the code

Buka command prompt dan kompilasi contoh di atas seperti yang ditunjukkan di bawah ini.

c:\>coffee -c constructor_example.coffee

Saat menjalankan perintah di atas, itu akan menghasilkan JavaScript berikut.

// Generated by CoffeeScript 1.10.0
(function() {
  var Student, student;

  Student = (function() {
    function Student(name) {
      this.name = name;
    }

    return Student;

  })();

  student = new Student("Mohammed");

  console.log("The name of the student is :"+student.name);

}).call(this);

Executing the Code

Jalankan contoh di atas dengan menjalankan perintah berikut pada prompt perintah.

coffee constructor_example.coffee

Saat berjalan, contoh di atas memberi Anda output berikut.

The name of the student is :Mohammed

Properti Instance

Sama seperti di objek, kita juga bisa memiliki properti di dalam kelas. Dan ini dikenal sebagaiinstance properties.

Contoh

Perhatikan contoh berikut. Di sini, kami telah membuat variabel (nama, usia) dan fungsi (pesan ()) di dalam kelas dan mengaksesnya menggunakan objeknya. Simpan contoh ini dalam sebuah file bernamainstance_properties_example.coffee

#Defining a class
class Student
  name="Ravi"
  age=24
  message: ->
    "Hello "+name+" how are you" 

#instantiating a class by passing a string to constructor
student = new Student();
console.log student.message()

Saat kompilasi, kode di atas menghasilkan keluaran sebagai berikut.

// Generated by CoffeeScript 1.10.0
(function() {
  var Student, student;

  Student = (function() {
    var age, name;

    function Student() {}

    name = "Ravi";

    age = 24;

    Student.prototype.message = function() {
      return "Hello " + name + " how are you";
    };

    return Student;

  })();

  student = new Student();

  console.log(student.message());

}).call(this);

Properti Statis

Kita dapat mendefinisikan properti statis di kelas. Ruang lingkup properti statis dibatasi di dalam kelas dan kami membuat fungsi statis menggunakanthis keyword atau aliasnya @simbol dan kita harus mengakses properti ini menggunakan nama kelas sebagai Class_Name.property .

Contoh

Dalam contoh berikut, kami telah membuat fungsi statis bernama pesan. dan mengaksesnya. Simpan di file dengan namastatic_properties_example.coffee.

#Defining a class
class Student
  @message:(name) ->
    "Hello "+name+" how are you" 
console.log Student.message("Raju")

Buka command prompt dan kompilasi file CoffeeScript di atas menggunakan perintah berikut.

c:\>coffee -c  static_properties_example.coffee

Saat menyusun, ini memberi Anda JavaScript berikut.

// Generated by CoffeeScript 1.10.0
(function() {
  var Student;

  Student = (function() {
    function Student() {}

    Student.message = function(name) {
      return "Hello " + name + " how are you";
    };

    return Student;

  })();

  console.log(Student.message("Raju"));

}).call(this);

Jalankan coffeeScript di atas dalam command prompt seperti yang ditunjukkan di bawah ini.

c:\>coffee static_properties_example.coffee

Saat menjalankan, contoh di atas memberi Anda output berikut.

Hello Raju how are you

Warisan

Di CoffeeScript, kita dapat mewarisi properti satu kelas di kelas lain menggunakan extends kata kunci.

Contoh

Berikut adalah Contoh pewarisan di CoffeeScript. Di sini, kami memiliki dua kelas yaituAdd dan My_class. Kami mewarisi properti kelas bernama Add di kelas My_class, dan mengaksesnya menggunakanextends kata kunci.

#Defining a class
class Add
   a=20;b=30
   
   addition:->
     console.log "Sum of the two numbers is :"+(a+b) 

class My_class extends Add

my_class = new My_class()
my_class.addition()

CoffeeScript menggunakan pewarisan prototipe di belakang layar. Di CoffeeScript, setiap kali kita membuat instance, konstruktor kelas induk dipanggil sampai kita menimpanya.

Kita bisa memanggil konstruktor kelas induk dari subkelas, menggunakan super() kata kunci seperti yang ditunjukkan pada contoh yang diberikan di bawah ini.

#Defining a class
class Add
   constructor:(@a,@b) ->
   
   addition:=>
     console.log "Sum of the two numbers is :"+(@a+@b) 

class Mul extends Add
   constructor:(@a,@b) ->
     super(@a,@b)
   
   multiplication:->
     console.log "Product of the two numbers is :"+(@a*@b)

mul = new Mul(10,20)
mul.addition()
mul.multiplication()

Kelas Dinamis

CoffeeScript menggunakan pewarisan prototipe untuk secara otomatis mewarisi semua properti instance suatu kelas. Ini memastikan bahwa kelas bersifat dinamis; bahkan jika Anda menambahkan properti ke kelas induk setelah anak dibuat, properti tersebut akan tetap disebarkan ke semua turunan yang diwariskan.

class Animal
  constructor: (@name) ->

class Parrot extends Animal

Animal::rip = true

parrot = new Parrot("Macaw")
console.log "This parrot is no more" if parrot.rip

Saat menjalankan, CoffeeScript di atas menghasilkan kode JavaScript berikut.

// Generated by CoffeeScript 1.10.0
(function() {
  var Animal, Parrot, parrot,
    extend = function(child, parent) { for (var key in parent) {
      if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() {
      this.constructor = child; } ctor.prototype = parent.prototype;
      child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    hasProp = {}.hasOwnProperty;

  Animal = (function() {
    function Animal(name) {
      this.name = name;
    }

    return Animal;

  })();

  Parrot = (function(superClass) {
    extend(Parrot, superClass);

    function Parrot() {
      return Parrot.__super__.constructor.apply(this, arguments);
    }

    return Parrot;

  })(Animal);

  Animal.prototype.rip = true;

  parrot = new Parrot("Macaw");

  if (parrot.rip) {
    console.log("This parrot is no more");
  }
  
}).call(this);