کوڈ شو ڈاون: روبی بمقابلہ جاوا اسکرپٹ

روبی اور جاوا اسکرپٹ سر سے آگے جارہے ہیں۔ اسکرپٹنگ کی یہ دونوں زبانیں متحرک طور پر ٹائپ کی گئی ہیں اور آبجیکٹ پر مبنی پروگرامنگ کی تائید کرتی ہیں۔ ہم ان کی کچھ عام خصوصیات میں ان کے فرق یا مماثلت کا جائزہ لیں گے۔

اعلان دستبرداری: ہم یہاں صرف جدید جاوا اسکرپٹ ES6 نحو کو دیکھ رہے ہیں۔

500px پر پروموٹ پولیمیٹ کی تصویر

سٹرنگ رکاوٹ

کمپیوٹر پروگرامنگ میں ، سٹرنگ انٹرپولیشن ایک تغیر کی قدر انجیکشن دینے کا عمل ہے یا اسٹرنگ لٹیرل میں ایک اظہار۔

روبی میں ، اس کو کہا جاتا ہے ، آپ نے اندازہ لگایا ، تار رگاہی۔

روبی:

پہلا نام = "مارٹن"
آخری نام = "رگس"
"ہائے ، میں # {پہلا نام} # {آخری_ نام} رکھتا ہوں۔"

جاوا اسکرپٹ میں ، یہی چیز ٹیمپلیٹ لٹریلز کے ساتھ حاصل کی جاسکتی ہے۔

جاوا اسکرپٹ:

const firstName = 'مارٹن'؛
const lastName = 'رگس'؛
کنسول.لوگ (`ہیلو ، میں $ {فرسٹ نیم} {{آخری نام} .`) ہوں؛

طریقے اور افعال

ویکیپیڈیا نے وضاحت کی ہے کہ ، کمپیوٹر پروگرامنگ میں ، ایک سبروٹین پروگرام کی ہدایات کا ایک سلسلہ ہے جو ایک مخصوص کام انجام دیتا ہے ، جسے ایک یونٹ کے طور پر پیک کیا جاتا ہے۔ اس یونٹ کو پھر پروگراموں میں استعمال کیا جاسکتا ہے جہاں یہ خاص کام انجام دیا جانا چاہئے۔

مختلف پروگرامنگ زبانوں میں ، ایک سبروٹائن کو طریقہ کار ، فنکشن ، روٹین ، ایک طریقہ ، یا سب پروگرام کہا جاسکتا ہے۔

استعمال کرنے کے ل، ، ان سبروٹائنوں کو پہلے بیان کرنے اور پھر بلانے کی ضرورت ہے۔ روبی میں ، وہ طریقوں کے طور پر اور جاوا اسکرپٹ میں جانا جاتا ہے ، انہیں افعال کہتے ہیں۔

روبی:

Def مکمل نام (پہلا نام ، آخری نام)
  "# {پہلا نام_کھانسی} # {آخری_ نام .کپیٹلائز}"
ختم
پورا نام رکھتا ہے ("بیٹٹریکس" ، "کدو")

جاوا اسکرپٹ:

فنکشنل فل نیم (پہلا نام ، آخری نام) {
  واپسی `$ {firstName.capitalize ()} $ {lastName.capitalize ()}`؛
}؛
کنسول.لوگ (مکمل نام ("بیٹریکس" ، "کیڈو"))؛

اگر آپ مذکورہ بالا مثالوں کو چلا رہے ہیں تو ، آپ نے شاید محسوس کیا ہے کہ جاوا اسکرپٹ کی مثال کام نہیں کرتی ہے ، لیکن ایک غلطی پھینک دیتی ہے۔

اس کی وجہ یہ ہے کہ جاوا اسکرپٹ مقامی طور پر بڑے پیمانے پر کی جانے والی تقریب کی وضاحت نہیں کرتا ہے۔ روبی کے پاس بہت سے آسان اور صاف محاورے والے طریقے ہیں جیسے # کیپیٹلائز جو واقعی آسان ہیں۔ مذکورہ بالا مثال کے کام کے ل we ، ہمیں جاوا اسکرپٹ کے اسٹرنگ آبجیکٹ پر پروٹو ٹائپ چین (بندر پیچ) استعمال کرنے کی ضرورت ہوگی۔

سٹرنگ.پرٹوٹائپ کوپیٹلائز = فنکشن () {
  اس کو واپس کریں۔
}

بلاکس

روبی میں ، بلاکس بنیادی طور پر کوڈ کے نامعلوم حصے ہوتے ہیں جن کو اندر کے طریقوں سے بھیجا جاسکتا ہے اور بلایا جاسکتا ہے۔ روبی میں بہت سے بلٹ میں موجود طریقے بلاکس کو قبول کرتے ہیں اور یہ اس طرح کے طریقوں سے سلوک کرنے کے طریقے کو موافقت کا ایک آسان طریقہ ہے۔

روبی:

ڈیف ٹائمر
  اسٹارٹ ٹائم = ٹائم۔نو
  "رننگ بلاک ..." رکھتا ہے
  
  پیداوار
  "ختم!" رکھتا ہے
  آخر_ وقت = وقت.نو - شروع_ وقت
  "پھانسی کا وقت: # {اختتام_ وقت}"
ختم
ٹائمر لگائیں 0. (0..10000000). ترتیب دیں}

ارے ، جاوا اسکرپٹ میں بلاکس نہیں ہیں ، لہذا مذکورہ بالا عمل درآمد ممکن نہیں ہے اور موازنہ پاگل ہے! یا یہ ہے؟ جاوا اسکرپٹ افعال کال بیک بیک افعال کو دلائل کے طور پر قبول کرسکتے ہیں اور اگر ہم روبی بلاکس کو بہت زیادہ گمنام طریقوں کی طرح سمجھتے ہیں تو ہم بھی اسی طرح کا نتیجہ حاصل کرسکتے ہیں۔

جاوا اسکرپٹ:

فنکشن ٹائمر (کال بیک) {
  کونٹ اسٹارٹ ٹائم = نئی تاریخ (). گیٹ ٹائم ()؛
  کنسول.لاگ ("چل رہا کال بیک ...")؛
  
  کال بیک ()؛
  کنسول.لاگ ("ختم!")؛
  const endTime = نئی تاریخ (). getTime ()؛
  واپسی `عملدرآمد کا وقت: $ T endTime - startTime}`؛
}؛
ٹائمر (() => Array.from (صف (10000000) .کیز ()). ترتیب دیں ())؛

نوٹ: روبی کے برعکس ، جاوا اسکرپٹ میں بلٹ ان رینج آبجیکٹ نہیں ہے۔ اوپر کا ارے ڈاٹ فریم (نمبر) .کیز () ایک صف کو 0 سے لے کر نمبر دیتی ہے۔

شناختی تکرار

روبی بہت اچھے محاوراتی آیتریٹرس (Arryys) اور (اور دیگر گنے گ Enے یا تکراری ڈھانچے) کے ذریعے لوپ کرنے کے لئے جانا جاتا ہے۔

روبی:

نام = ["ٹینگو" ، "کیش" ، "ڈالٹن" ، "رِگز"]
names.each do | name |
  نام رکھتا ہے
ختم

ES6 کے ساتھ ، جاوا اسکرپٹ میں ایک صف کے ذریعے تکرار کرنا ہوا کا جھونکا بن جاتا ہے:

جاوا اسکرپٹ:

نام کے نام = ['ٹینگو' ، 'کیش' ، 'ڈالٹن' ، 'رِگز']؛
names.forEach (name => console.log (نام))؛

نوٹ: جاوا اسکرپٹ کے لئے ہر فنکشن عنصر کی انڈیکس تک بھی جاسکتا ہے۔ روبی میں ، ہم ہر ایک کے ساتھ ایک مختلف ریڈیٹر استعمال کریں گے۔

کلاس اور طبقاتی ورثہ

آبجیکٹ اورینٹڈ پروگرامنگ میں ، کلاسیں آبجیکٹ تیار کرنے ، ریاست کے ل values ​​اقدار فراہم کرنے (آبجیکٹ کی خصوصیات یا اوصاف) اور طرز عمل کو نافذ کرنے کے لئے کوڈ ٹیمپلیٹس ہیں (جیسے حاصل کرنے والے اور اس طرح کی خصوصیات کو پڑھنے اور لکھنے کے لئے سیٹرز)۔

روبی:

کلاس گاڑی
  Def شروع (نام ، قسم)
    @ کا نام = نام
    @ قسم = قسم
  ختم
  ڈیف نام
    @ کا نام
  ختم
  Def قسم
    type
  ختم
ختم
کلاس کار <گاڑی
  Def شروع (نام)
   سپر (نام ، 'کار')
  ختم
ختم
ڈیابلو = کار.نیو ("لیمبوروگھینی")
diablo.name رکھتا ہے
diablo.type رکھتا ہے

جاوا اسکرپٹ:

کلاس گاڑی {
 
  تعمیر کنندہ (نام ، قسم) {
    this.name = name؛
    this.type = قسم؛
  }
 
  getName () {
    اس کا نام لوٹائیں۔
  }
 
  getType () {
    اس کو واپس کریں۔
  }
 
}
کلاس کار کی گاڑی میں توسیع {
 
  تعمیر کنندہ (نام) {
    سپر (نام ، 'کار')؛
  }
}
کانس ڈیابلو = نئی کار ('لیمبوروگھینی')؛
کنسول.لاگ (diablo.getName ())؛
کنسول.لاگ (diablo.getType ())؛

نوٹ: مذکورہ بالا مثال میں ، روبی وہیکل کی کلاس عام طور پر کسی خصوصیت کے قارئین کے ساتھ نافذ کی جائے گی تاکہ مثال کے طور پر متغیر کے ل the حاصل کرنے والے طریقے پیدا کیے جاسکیں۔ میں نے اوصاف کے قاری کو استعمال نہ کرنے کا انتخاب کیا تاکہ جاوا اسکرپٹ کے نفاذ کی طرح ہی نظر آسکے۔

تعمیر کرنا

جدید جاوا اسکرپٹ نے یہ واقعی عمدہ چیز متعارف کرائی ہے جسے ڈسٹریکٹرکچر کہا جاتا ہے ، جہاں آپ ایک مختصر نحو کے ساتھ متغیر کو صفوں یا اشیاء کے اندر عناصر تفویض کرسکتے ہیں۔

جاوا اسکرپٹ:

پہلا نام ، آخری نام = 'جیمز بانڈ'۔ سپلٹ ()؛
کنسول.لوگ (`میرا نام $ {lastName} ، $ {firstName} $ {lastName}` ہے)؛

یقینا you آپ یہ روبی میں نہیں کرسکتے ہیں!

روبی:

پہلا نام ، آخری نام = "جیمز بانڈ". سپلٹ
"میرا نام # {آخری_ نام} ، # {پہلا نام} # {آخری_ نام is" رکھتا ہے

نوٹ: اگرچہ ہم جاوا اسکرپٹ میں جتنا روبی میں صفوں کا بندوبست کر سکتے ہیں ، اس سے کہیں زیادہ روبی براہ راست ڈسٹریکچر ہیش کے برابر نہیں ہے۔

اسپریڈ آپریٹر

جدید جاوا اسکرپٹ نے اسپریڈ آپریٹر بھی متعارف کرایا ہے جس کے ذریعہ تکرار قابل اظہار کو وسعت دی جاسکتی ہے جہاں صفر یا اس سے زیادہ دلائل یا عناصر کی توقع کی جاتی ہے۔

جاوا اسکرپٹ:

فنکشن کا مجموعہ (x ، y ، z) {
  واپس x + y + z؛
}؛
تعداد تعداد = [1، 2، 3]؛
کنسول.لوگ (رقم (... نمبر)؛
[a، b، ... باقی] = [10، 20، 30، 40، 50]؛
کنسول.لوگ (ا)؛
کنسول.لوگ (بی)؛
کنسول.لاگ (باقی)؛ // باقی ایک صف ہے!

روبی میں ، ہمارے پاس اس کے لئے اسپلٹ آپریٹر ہے۔

روبی:

ڈیف نیم (x ، y ، z)
  x + y + z
ختم
نمبر = [1 ، 2 ، 3]
رقم (* نمبر) رکھتا ہے
a، * باقی، b = [10، 20، 30، 40، 50]
ڈالتا ہے a
رکھتا ہے b
آرام ڈالتا ہے # باقی ایک صف ہے!

نوٹ: آپ نے شاید محسوس کیا ہے کہ روبی میں * باقی متغیر کے درمیان ہے۔ یہ اسپاٹ آپریٹر کو متغیر کے درمیان کہیں بھی رکھا جاسکتا ہے۔ جاوا اسکرپٹ میں ، اسپریڈ آپریٹر آخری ہونا چاہئے۔

روبی کے پاس ہیش پر بھی یہی کام کرنے کے لئے ڈبل اسپلٹ آپریٹر ** ہے۔ جاوا اسکرپٹ ES2018 تفصیلات اسپیڈ آپریٹر کو بھی اشیاء پر متعارف کروا رہی ہے۔

آخری لفظ

جیسا کہ آپ کو شاید اندازہ ہوگیا ہے ، دونوں زبانیں آخر کار اتنی مختلف نہیں ہیں اور ES6 کے ساتھ جاوا اسکرپٹ لکھنا زیادہ خوشگوار ہوگیا ہے۔ یقینی طور پر ، جاوا اسکرپٹ براؤزر کی زبان ہے اور اس کا ایونٹ لوپ متضاد طرز عمل فراہم کرتا ہے۔ دوسری طرف ، روبی کے پاس میٹ پیگرام پروگرامنگ کے ل very بہت طاقتور ٹولز ہیں اور وہ محاوراتی نحو کے لئے محبوب ہے۔ اختتام کے اختتام پر ، میں سمجھتا ہوں کہ دونوں کو جاننے اور جاننا فائدہ مند ہے کیوں کہ اکثر ایک پروگرامنگ زبان کا علم آپ کو دوسرے میں کسی خاص مسئلے کے کوڈ یا نمٹنے کے طریقوں سے متعلق نظریات فراہم کرتا ہے۔