CoffeeScript - कक्षाएं और विरासत

जावास्क्रिप्ट प्रदान नहीं करता है classकीवर्ड। हम वस्तुओं और उनके प्रोटोटाइप का उपयोग करके जावास्क्रिप्ट में विरासत प्राप्त कर सकते हैं। प्रत्येक वस्तु का अपना प्रोटोटाइप होता है और वे अपने प्रोटोटाइप से कार्यों और गुणों को प्राप्त करते हैं। चूंकि प्रोटोटाइप भी एक वस्तु है, इसलिए इसका अपना प्रोटोटाइप भी है।

हालांकि प्रोटोटाइप विरासत में क्लासिक विरासत की तुलना में कहीं अधिक शक्तिशाली है, यह नौसिखिए उपयोगकर्ताओं के लिए मुश्किल और भ्रमित करने वाला है।

कॉफ़ीस्क्रिप्ट में कक्षाएं

इस समस्या को संबोधित करते हुए, कॉफीस्क्रिप्ट एक बुनियादी संरचना प्रदान करता है जिसे कहा जाता है classजो जावास्क्रिप्ट के प्रोटोटाइप का उपयोग करके बनाया गया है। आप नीचे दिखाए गए अनुसार क्लास कीवर्ड का उपयोग करके कॉफीस्क्रिप्ट में एक क्लास को परिभाषित कर सकते हैं।

class Class_Name

उदाहरण

निम्नलिखित उदाहरण पर विचार करें, यहाँ हमने एक वर्ग बनाया है जिसका नाम है Student कीवर्ड का उपयोग करना class

class Student

यदि आप उपरोक्त कोड संकलित करते हैं, तो यह निम्नलिखित जावास्क्रिप्ट उत्पन्न करेगा।

var Student;

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

  return Student;

})();

तुरंत क्लास लगाना

हम नीचे दिखाए गए अनुसार अन्य ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषाओं की तरह नए ऑपरेटर का उपयोग करके एक क्लास को इंस्टेंट कर सकते हैं।

new Class_Name

आप उपर्युक्त निर्मित (छात्र) वर्ग का उपयोग कर सकते हैं new ऑपरेटर जैसा कि नीचे दिखाया गया है।

class Student
new  Student

यदि आप उपरोक्त कोड संकलित करते हैं, तो यह निम्नलिखित जावास्क्रिप्ट उत्पन्न करेगा।

var Student;

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

  return Student;

})();

new Student;

एक कंस्ट्रक्टर को परिभाषित करना

एक कंस्ट्रक्टर एक ऐसा फंक्शन है, जिसे जब हम क्लास में इंस्टाल करते हैं, तो इसका मुख्य उद्देश्य इंस्टेंस वेरिएबल्स को इनिशियलाइज़ करना होता है। CoffeeScript में, आप केवल नाम के साथ एक फ़ंक्शन बनाकर एक कंस्ट्रक्टर को परिभाषित कर सकते हैंconstructor जैसा की नीचे दिखाया गया।

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

यहां, हमने एक कंस्ट्रक्टर को परिभाषित किया है और उदाहरण चर के लिए स्थानीय चर नाम सौंपा है।

@ ऑपरेटर एक उपनाम है this कीवर्ड, इसका उपयोग किसी वर्ग के उदाहरण चर को इंगित करने के लिए किया जाता है।

अगर हम जगह @कंस्ट्रक्टर के एक तर्क से पहले, फिर यह एक इंस्टेंस चर के रूप में स्वचालित रूप से सेट हो जाएगा। इसलिए, उपरोक्त कोड को बस नीचे दिखाए अनुसार लिखा जा सकता है -

class Student
  constructor: (@name)->

उदाहरण

यहाँ CoffeeScript में एक निर्माता का एक उदाहरण है। नाम के साथ एक फ़ाइल में सहेजेंconstructor_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

ओपन कमांड प्रॉम्प्ट और उपरोक्त उदाहरण को नीचे दिखाए अनुसार संकलित करें।

c:\>coffee -c constructor_example.coffee

उपरोक्त कमांड निष्पादित करने पर यह निम्नलिखित जावास्क्रिप्ट का उत्पादन करेगा।

// 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

कमांड प्रॉम्प्ट पर निम्न कमांड निष्पादित करके उपरोक्त उदाहरण चलाएँ।

coffee constructor_example.coffee

चलने पर, उपरोक्त उदाहरण आपको निम्नलिखित आउटपुट देता है।

The name of the student is :Mohammed

उदाहरण गुण

वस्तुओं की तरह ही, हमारे पास भी एक वर्ग के गुण हो सकते हैं। और इन के रूप में जाना जाता हैinstance properties

उदाहरण

निम्नलिखित उदाहरण पर विचार करें। यहां, हमने कक्षा के भीतर चर (नाम, आयु) और एक फ़ंक्शन (संदेश ()) बनाए हैं और अपनी वस्तु का उपयोग करके उन्हें एक्सेस किया है। इस उदाहरण को नाम की फ़ाइल में सहेजें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()

संकलन करने पर, उपरोक्त कोड निम्न आउटपुट उत्पन्न करता है।

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

स्थैतिक गुण

हम कक्षा में स्थिर गुणों को परिभाषित कर सकते हैं। स्थिर गुणों का दायरा वर्ग के भीतर प्रतिबंधित है और हम स्थैतिक कार्यों का उपयोग करते हैंthis keyword या उसका उपनाम @प्रतीक और हमें क्लास नाम का उपयोग करके इन गुणों तक पहुँचना है

उदाहरण

निम्नलिखित उदाहरण में, हमने एक स्थिर फ़ंक्शन बनाया है जिसका नाम संदेश है। और इसे एक्सेस किया। नाम के साथ एक फ़ाइल में सहेजेंstatic_properties_example.coffee

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

कमांड प्रॉम्प्ट खोलें और निम्न कमांड का उपयोग करके उपरोक्त कॉफीस्क्रिप्ट फ़ाइल संकलित करें।

c:\>coffee -c  static_properties_example.coffee

संकलन करने पर, यह आपको निम्नलिखित जावास्क्रिप्ट देता है।

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

नीचे दिए गए अनुसार कमांड प्रॉम्प्ट में उपरोक्त कॉफीस्क्रिप्ट निष्पादित करें।

c:\>coffee static_properties_example.coffee

निष्पादित करने पर, उपरोक्त उदाहरण आपको निम्नलिखित आउटपुट देता है।

Hello Raju how are you

विरासत

CoffeeScript में, हम एक वर्ग के गुणों का उपयोग करके दूसरे वर्ग में इनहेरिट कर सकते हैं extends कीवर्ड।

उदाहरण

निम्नलिखित कॉफीस्क्रिप्ट में विरासत का एक उदाहरण है। यहाँ पर, हमारे पास दो वर्ग हैंAdd तथा My_class। हमें वर्ग का नाम My_class में जोड़ें श्रेणी के गुण विरासत में मिले, और उनका उपयोग करके उन्हें एक्सेस कियाextends कीवर्ड।

#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 में, जब भी हम उदाहरण बनाते हैं, तब तक पैरेंट क्लास के कंस्ट्रक्टर को तब तक लागू किया जाता है जब तक हम इसे ओवरराइड नहीं करते।

हम उपवर्ग से मूल वर्ग के निर्माता का उपयोग कर सकते हैं super() कीवर्ड जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है।

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

गतिशील कक्षाएं

कॉफीस्क्रिप्ट एक वर्ग के सभी उदाहरण गुणों को स्वचालित रूप से प्राप्त करने के लिए प्रोटोटाइप विरासत का उपयोग करता है। यह सुनिश्चित करता है कि कक्षाएं गतिशील हैं; यहां तक ​​कि अगर आप एक बच्चे के पैदा होने के बाद एक मूल वर्ग में गुण जोड़ते हैं, तो संपत्ति अभी भी अपने सभी विरासत वाले बच्चों के लिए प्रचारित की जाएगी।

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

निष्पादित करने पर, उपरोक्त कॉफीस्क्रिप्ट निम्नलिखित जावास्क्रिप्ट कोड उत्पन्न करता है।

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