مقالات طراحی سایت

آموزش موارد مربوط به طراحی و ساخت وب سایت

در ES6، ویژگی های جذابی به زبان جاوااسکریپت اضافه شده است. پس بدون اتلاف وقت بریم سراغ این ویژگی ها

1. Rest Parameter

به این فانکشن نگاه کنید:

 
Math.max(arg1, arg2,, argN)
 

شما میتوانید به این فانکشن، هرچقدر که خواستید عدد به عنوان آرگومان پاس بدهید. مثلا:

 
let max1 = Math.max(3, 5, 5, 1); // 5
let max2 = Math.max(23, 1, 56, 23, 13, 67); // 67
 

با استفاده از ویژگی rest parameter، شما میتوانید فانکشن هایی مثل Math.max ایجاد کنید.

مثلا:

 
function averageOf(…numbers) {
 let sum = 0;
 
 for (let number of numbers) {
 sum += number;
 }
 return sum / numbers.length;
}
let average = averageOf(5, 6, 2, 1); // 3.5
 

نقطه ها (…) به شما کمک میکنند که فانکشن های خاصی ایجاد کنید.

2. Rest Promise

Promise به شما این امکان را میدهد که تا زمان تکمیل تسک قبلی، تسک های بعدی را به تاخیر بیاندازید. در مواقعی که شما با تسک های asynchronous سروکار دارید، مثل فراخوانی APIها، این ویژگی واقعا کاراست.

مطالعه بیشتر: آیا جاوااسکریپت Synchronous است یا Asynchronous

قبل از معرفی Promise، ما از callbackها استفاده میکردیم. اما الان امکان بهتری نسبت به callbackها داریم. اما چرا؟

هیچ کس از جهنم callbackها خوشش نمی آید. هرچقدر نیاز به تاخیر یا deffer بیشتر باشد، عمق جهنم بیشتر خواهد شد. جهنم callbackها حتی میتواند چیزی شبیه به مثال زیر شود:

 
processStep1(id, function(data1) {
 processStep2(data1, function(data2) {
   processStep3(data2, function(data3) {
     processStep4(data3, function(data4) {
       finish(data4);
     });
   });
 });
});
 

اما با Promise کد زیباتری مانند زیر داریم:

 
proccessStep1(id)
   .then(function(data1) {
   return processStep2(data1);
 })
   .then(function(data2) {
   return processStep3(data2);
 })
   .then(function(data3) {
   return processStep4(data3);
 })
   .then(function(data4) {
   finish(data4);
 })
 .catch(errorHandler);
 

همانطور که ملاحظه میکنید، همه چیز بصورت منطقی مثل زنجیر به هم متصل است. اما این همه ماجرا نیست.

با کمک arrow function شما کدی بهتر از قبل خواهید داشت:

 
proccessStep1(id)
 .then(data1 => processStep2(data1))
 .then(data2 => processStep3(data2))
 .then(data3 => processStep4(data3))
 .then(data4 => finish(data4))
 .catch(errorHandler);
 

میبینید؟ دیگر نیازی به callback نیست.

3. Arrow Function

امروزه، حتی زبان های برنامه نویسی مدرن تمایل دارند شیوه کدنویسی خود را ساده تر کنند. یکی از وظایف arrow functionها در جاوااسکریپت این است.

فانکشن ها قبل از arrow function بدین صورت نوشته میشد:

 
function sayHello(name) {
 console.log(‘Hello ‘ + name);
}
sayHello(‘Amy’); // Hello Amy
 

اما الان:

 
const sayHello = name => console.log(‘Hello ‘ + name);
sayHello(‘Amy’); // Hello Amy
 

خروجی هردو یکسان است اما سینتکس دوم بسیار زیباتر است.

4. Template Literal

Template Literal، در مجموع strings literal هایی هستند که میتوانند به لاین های مختلفی بشکنند و از عبارت interpolate استفاده میکنند (${…}).

در قدیم شما برای تعریف یک رشته از تک quotation (‘) یا double quotes (“) استفاده میکردید. اما در Template literal شما از backtick (`) استفاده میکنید.

 
const bookTitle = ‘JavaScript’;
console.log(`This ${bookTitle} book is great.
I learned so much from it.`);
// This JavaScript book is great
// I learned so much from it.
 

5. const و let

قبل از ES6، با استفاده از کلیدواژه var متغیر تعیریف میکردیم. اینکار مشکلاتی به همراه داشت.

از آنجایی کهvar دارای block scope نیست، میتواند رقتارهای پیش بینی نشده ای بوجود آورد.

 
var name = ‘Amy’;
if (true) {
 var name = ‘James’;
}
console.log(name); // James
 

ممکن است در مثال بالا مشکلی نبینید. اما در پروژه های بزرگ، زمانی که با صدها خط کد درگیر باشید، ممکن است ندانید متغیری با نام name وجود داشته باشد. بنابراین شما متعیری با همان نام در اسکوپ شرط خود تعریف میکنید. متاسفانه اینکار باعث میشود تا بدون آنکه متوجه شوید مقدار آن متغیر در اسکوپ global تغییر کند.

با کمک let، اسکوپ متغیر به بلاکی که در آن تعریف شده است محدود میشود. در مثال زیر بجای متغیر var از let استفاده کردم:

 
let name = ‘Amy’;
if (true) {
 let name = ‘James’;
}
console.log(name); // Amy
 

همانطور که ملاحظه میکنید، تعریف متغیر هم نام مشکلی برای متغیر global ایجاد نمیکند. با آنکه هم نام هستند، اما از آنجایی که اسکوپ متفاوتی دارند متفاوت از یکدیگر رفتار میکنند.

const نیز مانند let است. ما از متغیر const برای متغیرهایی که قرار نیست تغییر کنند استفاده میکنیم.

 
const PI = 3.14;
PI = 3; // error: Uncaught TypeError: Assignment to constant variable.
 

برای جلوگیری از این چنین مشکلات بجای var از let یا const استفاده کنید.

6. Default Parameter

Default Parameter در جاوااسکریپت این امکان را به شما میدهد تا در فانکشن ها مقادیر پیشفرض برای مقادیر null یا undefined تعریف کنید.

اگر شما زمان فراخوانی فانکشن به آن آرگومانی پاس ندهید، مقدار آن آرگومان بصورت پیش فرض undefined است:

 
const welcome = name => console.log(‘Welcome ‘ + name);
welcome(); // Welcome undefined
 

بدون ویژگی Default Parameter، اگر شما میخواستید که پارامتر name مقدار پیش فرض داشته باشد اینکار را انجام میدادید:

 
const welcome = name => {
 name = name || ‘Amy’;
 console.log(‘Welcome ‘ + name);
};
welcome(); // Welcome Amy
 

با معرفی Default Parameter در ES6، فانکشن شما بصورت زیر تبدیل میشود:

 
const welcome = (name = ‘Amy’) => console.log(‘Welcome ‘ + name);
welcome(); // Welcome Amy
 

بسیار ساده و موثر است، اینطور نیست؟

7. Module

زمان نوشتن کد، بهتر است آنها را به بخش های مختلف تقسیم کنید که در آن هر بخش وظایف خودش را انجام دهد. در جاوااسکریپت به آن بخش ها ماژول میگوییم.

همانطور که متوجه شدید ماژول ها در جاوا اسکریپت، فایل هایی هستند که برای استفاده مجدد و سازمان دادن، کارهای معینی را در خود جا داده اند.

برای مثال ماژول calculation.js را در نظر بگیرید:

 
export const moduleName = ‘Calculation’;
export function sum(a, b) {
 return a + b;
}
 

ما از کلید واژه export استفاده کردیم تا از بیرون به متغیر و فانکشن دسترسی داشته باشیم. در فایلی که میخواهیم به متغیر و فانکشن export شده دسترسی داشته باشیم از کلید واژه import استفاده میکنیم:

 
import { moduleName, sum } from ‘./calculation.js;
console.log(moduleName); // Calculation
let a = sum(5, 8); // 13
 

8. Class

تا قبل از ES6، چیزی بعنوان کلاس وجود نداشت. ما بجای کلاس از فانکشن استفاده میکردیم.

 
function Person(name) {
 this.name = name;
}
Person.prototype.introduce = function () {
 console.log(`My name is ${this.name}`);
}
let person = new Person(‘Amy’);
person.introduce(); // My name is Amy
 

اکنون، دیگر لازم نیست اینکار را انجام دهید:

 
class Person {
 constructor(name) {
 this.name = name;
 }
 introduce() {
 console.log(`My name is ${this.name}`);
 }
}
let person = new Person(‘Amy’);
person.introduce(); // My name is Amy
 

اگر با زبان های برنامه نویسی مثل C# یا Java آشنا باشید، حتما از این ویژگی ES6 خوشحال خواهید شد زیرا سینتکس زبان را تمیز تر و راحت تر میکند.

8. Destructuring

این ویژگی این امکان را به شما میدهد تا بخش خاصی از آبجکت یا آرایه را خارج و به متغیرها assign کنید:

 
let book = {
 title: ‘JavaScript’,
 price: 13,
 author: ‘Amy’
};
let { title, author } = book;
console.log(title, author); // JavaScript Amy
 

به نقل از: medium

نوشتن دیدگاه