CoffeeScript - Sınıflar ve Kalıtım
JavaScript, classanahtar kelime. Nesneleri ve prototiplerini kullanarak JavaScript'te kalıtım elde edebiliriz. Her nesnenin kendi prototipi vardır ve prototiplerinden işlevleri ve özellikleri miras alırlar. Prototip aynı zamanda bir nesne olduğu için kendi prototipine de sahiptir.
Prototip kalıtım, klasik kalıtımdan çok daha güçlü olsa da, acemi kullanıcılar için zor ve kafa karıştırıcıdır.
CoffeeScript'te Sınıflar
CoffeeScript, bu soruna değinen temel bir yapı sağlar: classJavaScript'in prototipleri kullanılarak oluşturulmuştur. CoffeeScript'te, aşağıda gösterildiği gibi class anahtar sözcüğünü kullanarak bir sınıf tanımlayabilirsiniz.
class Class_Name
Misal
Aşağıdaki örneği düşünün, burada adında bir sınıf oluşturduk Student anahtar kelimeyi kullanarak class.
class Student
Yukarıdaki kodu derlerseniz, aşağıdaki JavaScript'i oluşturacaktır.
var Student;
Student = (function() {
function Student() {}
return Student;
})();
Bir sınıfın örneklenmesi
Aşağıda gösterildiği gibi diğer nesne yönelimli programlama dilleri gibi, new operatörü kullanarak bir sınıfı başlatabiliriz.
new Class_Name
Yukarıda oluşturulan (Öğrenci) sınıfını, new Operatör aşağıda gösterildiği gibi.
class Student
new Student
Yukarıdaki kodu derlerseniz, aşağıdaki JavaScript'i oluşturacaktır.
var Student;
Student = (function() {
function Student() {}
return Student;
})();
new Student;
Bir Oluşturucu Tanımlama
Yapıcı, bir sınıfı başlattığımızda çağrılan bir işlevdir, ana amacı örnek değişkenlerini başlatmaktır. CoffeeScript'te, yalnızca adla bir işlev oluşturarak bir kurucu tanımlayabilirsiniz.constructor Aşağıda gösterildiği gibi.
class Student
constructor: (name)->
@name = name
Burada bir kurucu tanımladık ve yerel değişken adını örnek değişkenine atadık.
@ operatörün takma adıdır this anahtar kelime, bir sınıfın örnek değişkenlerini işaret etmek için kullanılır.
Eğer yerleştirirsek @yapıcının bir bağımsız değişkeninden önce, otomatik olarak bir örnek değişkeni olarak ayarlanacaktır. Bu nedenle, yukarıdaki kod aşağıda gösterildiği gibi basitçe yazılabilir -
class Student
constructor: (@name)->
Misal
CoffeeScript'te bir oluşturucu örneği. Adıyla bir dosyaya kaydedinconstructor_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
Komut istemini açın ve yukarıdaki örneği aşağıda gösterildiği gibi derleyin.
c:\>coffee -c constructor_example.coffee
Yukarıdaki komutu yürütürken aşağıdaki JavaScript'i üretecektir.
// 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
Komut isteminde aşağıdaki komutu çalıştırarak yukarıdaki örneği çalıştırın.
coffee constructor_example.coffee
Çalışırken, yukarıdaki örnek size aşağıdaki çıktıyı verir.
The name of the student is :Mohammed
Örnek Özellikleri
Nesnelerde olduğu gibi, bir sınıf içinde de özelliklere sahip olabiliriz. Ve bunlar şu şekilde bilinirinstance properties.
Misal
Aşağıdaki örneği düşünün. Burada sınıf içerisinde değişkenler (isim, yaş) ve bir fonksiyon (mesaj ()) oluşturduk ve nesnesini kullanarak bunlara eriştik. Bu örneği adlı bir dosyaya kaydedin.instance_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()
Derleme sırasında yukarıdaki kod aşağıdaki çıktıyı üretir.
// 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);
Statik Özellikler
Sınıfta statik özellikler tanımlayabiliriz. Statik özelliklerin kapsamı sınıf içinde sınırlandırılmıştır vethis keyword veya takma adı @sembol ve bu özelliklere Class_Name.property olarak sınıf adını kullanarak erişmeliyiz .
Misal
Aşağıdaki örnekte, message adında bir statik fonksiyon oluşturduk. ve ona erişti. Adıyla bir dosyaya kaydedinstatic_properties_example.coffee.
#Defining a class
class Student
@message:(name) ->
"Hello "+name+" how are you"
console.log Student.message("Raju")
Komut istemini açın ve yukarıdaki CoffeeScript dosyasını aşağıdaki komutu kullanarak derleyin.
c:\>coffee -c static_properties_example.coffee
Derlemede size aşağıdaki JavaScript'i verir.
// 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);
Yukarıdaki coffeeScript'i aşağıda gösterildiği gibi komut isteminde çalıştırın.
c:\>coffee static_properties_example.coffee
Yürütüldüğünde, yukarıdaki örnek size aşağıdaki çıktıyı verir.
Hello Raju how are you
Miras
CoffeeScript'te, bir sınıfın özelliklerini başka bir sınıfın özelliklerini kullanarak miras alabiliriz extends anahtar kelime.
Misal
Aşağıda, CoffeeScript'te bir miras örneği verilmiştir. Burada iki sınıfımız var:Add ve My_class. My_class sınıfında Add adlı sınıfın özelliklerini miras aldık ve bunlaraextends anahtar kelime.
#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, perde arkasında prototip kalıtım kullanır. CoffeeScript'te, örnekler oluşturduğumuzda, üst sınıfın yapıcısı biz onu geçersiz kılana kadar çağrılır.
Alt sınıftan üst sınıfın yapıcısını kullanarak, super() aşağıda verilen örnekte gösterildiği gibi anahtar kelime.
#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()
Dinamik Sınıflar
CoffeeScript, bir sınıfın tüm örnek özelliklerini otomatik olarak devralmak için prototip mirasını kullanır. Bu, sınıfların dinamik olmasını sağlar; Bir alt sınıf oluşturulduktan sonra bir üst sınıfa özellikler ekleseniz bile, özellik, miras alınan tüm alt sınıflarına yayılır.
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
Yürütüldüğünde, yukarıdaki CoffeeScript aşağıdaki JavaScript kodunu oluşturur.
// 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);