فهرست مطالب

آشنایی با جنریک‌ها generics در تایپ اسکریپت typescript

اگر مدتی است که از تایپ‌اسکریپت استفاده می‌کنید اما خیلی از کاربرد جنریک‌ها در تایپ اسکریپت آگاه نیستید، می‌توانید تا انتهای مقاله همراه ما باشید. شاید فکر کنید استفاده از جنریک‌ها پیچیده است و زحمت زیادی برایتان خواهد داشت. اما اینطور نیست. استفاده از جنریک‌ها در تایپ اسکریپت نه تنها مشکل نیست، بلکه با به کارگیری صحیح آن‌ها می‌توانیم، کدنویسی ساده‌تر و ایمن‌تری را تجربه کنیم.

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

جنریک چیست؟

جنریک یا ژنریک (generic) یک مفهوم در برنامه‌ نویسی است که به ما امکان می‌دهد تا کدی را بنویسیم که با انواع مختلفی از داده‌ها کار کند.

Generics از ویژگی‌های مخصوص تایپ اسکریپت هستند که در جاوا اسکریپت وجود ندارند. جنریک به ما اجازه می‌دهد تا یک حالت عمومی را برای کلاس‌ها، توابع، رابطه‌ها یا هر ساختار دیگری تعریف کنیم و سپس نوع خاص آن را در مواردی که مورد نیاز است را استفاده کنیم. به این ترتیب، ما می‌توانیم کد قابل استفادهٔ مجدد، امن و پویا بسازیم.

چرا باید از جنریک‌ها استفاده کنیم؟

 Generics یک ابزار قدرتمند است که به کمک آن می‌توانیم کدهای قابل استفادهٔ مجدد و ایمن بنویسیم. Generics در TypeScript روشی برای ایجاد اجزا یا توابع قابل استفادهٔ مجدد است که می‌تواند چندین نوع متغیر را در زمان کامپایل کردن اجرا کند.

جنریک‌ها می‌توانند امنیت نوع متغیر را تضمین کنند. به جای استفاده از نوع any یا تبدیل نوع متغیر، می‌توانیم از نوع متغیر جنریک استفاده کنیم که در زمان کامپایل کردن چک شود و خطاهای احتمالی را پیشگیری کند.

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

جنریک یا ژنریک، یکی از ابزارهای اصلی در جعبه ابزار برای ایجاد کامپوننت‌های قابل استفادهٔ مجدد است، یعنی قادر به ایجاد کامپوننتی است که می‌تواند بر روی انواع مختلف متغیر کار کند.

چگونه از جنریک‌ها در تایپ اسکریپت استفاده کنیم؟

برای استفاده از جنریک‌ها در تایپ اسکریپت، باید یک متغیر نوع type variable را در تعریف تابع، کلاس، رابط یا نوع مستعار خود اضافه کنیم. این متغیر نوع type به ما امکان می‌دهد تا نوع داده را به عنوان یک پارامتر در نظر بگیریم و با آن کار کنیم. شما می‌توانید از علامت <> برای مشخص کردن متغیر نوع استفاده کنید. برای مثال:

function identity<Type>(arg: Type): Type { return arg;}

اینجا ما یک تابع جنریک با نام identity ساخته‌ایم که یک آرگومان و یک خروجی از نوع Type دارد. می‌توانیم هنگام فراخوانی تابع، نوع Type را به صورت صریح یا خودکار مشخص کنیم:

let output1 = identity<string>(“myString”); // explicit

let output2 = identity(“myString”); // implicit

 

ما همچنین می‌توانیم جنریک‌های خود را با قیدهای extends محدود کنیم، مقادیر پیش فرض default values برای آن‌ها تعریف کنیم، و آن‌ها را در کلاس‌ها، رابط‌ها و نوع مستعارهای خود استفاده کنیم.

به عنوان مثال، می‌توانیم یک تابع بسازیم که یک آرایه array را دریافت کرده و اولین عنصر آن را برگرداند. برای این کار، می‌توانید از یک متغیر نوع Type استفاده کنید که به عنوان نوع آرایه و نوع بازگشت تابع قرار می گیرد:

function firstElement<Type>(arr: Type[]): Type | undefined { return arr[0];}

حالا می‌توانید این تابع را با هر نوع داده‌ای فراخوانی کنید:

let numbers = [1, 2, 3];

let firstNumber = firstElement(numbers); // firstNumber is number

let words = [“hello”, “world”];

let firstWord = firstElement(words); // firstWord is string

تفاوت‌ها و شباهت‌های جنریک در تایپ اسکریپت با سایر زبان‌ها در چیست؟

– جنریک‌ها در تایپ اسکریپت بر اساس نوع ساختاری structural typing کار می‌کنند. یعنی دو نوع با هم سازگار هستند اگر دارای ساختار یکسان و نام یا منشا متفاوت باشند. 

۲- جنریک‌ها در تایپ اسکریپت به شما امکان می‌دهند تا رابط‌های بین ورودی و خروجی توابع، کلاس‌ها و نوع (type) مستعارهای خود را به صورت دقیق و منعطف تعریف کنید. شما می‌توانید قیدهای constraints را به جنریک‌های خود اضافه کنید تا نوع ورودی را محدود کنید. 

۳- در تایپ اسکریپت، شما می‌توانید از هر نوع دلخواه برای پارامترهای نوع جنریک استفاده کنید، حتی اگر آن نوع خودش ژنریک باشد.

در جاوا یا سی شارپ، شما باید از نوع‌های محدود شده (bounded types) استفاده کنید که به یک سوپر تایپ یا چندین رابط محدود شده باشند.

۴- در تایپ اسکریپت، شما می‌توانید از عملگر in برای ساخت نقشۀ نوع (type mapping) از چندین تایپ سادۀ جنریک استفاده کنید.

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

۵- در تایپ اسکریپت، شما می‌توانید از پارامترهای نوع پیش فرض (default type parameters) استفاده کنید که در صورت عدم تعیین نوع جنریک، به طور خودکار استفاده می‌شوند. در جاوا یا سی شارپ، شما نمی‌توانید پارامترهای نوع پیش فرض را تعریف کنید و باید همه پارامترهای نوع را هنگام استفاده از جنریک مشخص کنید.

۶- جنریک ها در تایپ اسکریپت به شما کمک می‌کنند تا الگوریتم های قابل استفادهٔ مجدد و منطق قوی‌تر بسازید. برخلاف زبان‌های داینامیک مانند جاوا‌ اسکریپت، شما نمی‌توانید از any استفاده کنید و سپس به صورت دستی نوع داده را بررسی کنید.

بحث و نتیجه‌گیری

مفهوم جنریک در ابتدا می‌تواند کمی گیج‌کننده باشد. شما دانستید که جنریک‌های TypeScript یک راه عالی برای ایجاد کد قابل استفادهٔ مجدد ارائه می‌دهند. 

جنریک به ما کمک می‌کند کنترل بیشتری بر ورودی‌ها و خروجی‌های خود در جاوا اسکریپت داشته باشیم. 

اگر می‌خواهید از TypeScript در برنامه‌های React خود استفاده کنید، آموزش ما را بررسی کنید تا راهنمای ترکیب TypeScript با React را بیاموزید. همچنین، بقیه وبلاگ ما را برای آموزش‌های مفیدتر بررسی کنید.

نویسنده: رویا گلماه

نویسنده: رویا گلماه

سایر نوشته‌ها
نویسنده: رویا گلماه

نویسنده: رویا گلماه

سایر نوشته‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *