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