هومن امینی
هومن امینی
خواندن ۳ دقیقه·۴ سال پیش

جنریک ها در تایپ اسکریپت

ساخت کامپوننت‌ها با قابلیت استفاده مجدد یک هدف اصلی مهندسی نرم افزار است و به طبع ساخت کامپوننت هایی که با تایپ های مختلف کار کند مورد نیاز است و ابزار جهت این منظور در زبان ها مختلف برنامه نویسی generic است و این قابلیت در جاوااسکریپت وجود ندارد و تایپ‌اسکریپت استفاده از آن را برای ما مهیا می‌نماید.

یک نیاز ساده که بهتر است جهت آن از جنریک استفاده شود این است که ما یک فانکشن داشته باشیم هر چیزی که به آن پاس می کنم همان را برگرداند. مانند فانکشن echo

بدون استفاده از جنریک فانکش را می توانیم به صورت زیر بنویسیم.

اما همانطور که می بینیم این فانکشن صرفا اعداد را قبول می کند و جهت عمومی کردن این فانکشن یعنی اینکه بتواند هر تایپی را قبول کند می توانیم از any به صورت زیر استفاده نماییم.

اما مشکلی که فانکشن فوق دارد این است که هر داده‌ای به آن پاس کنیم به ما تایپ any برمی گرداند و اطلاعات تایپ دقیق مقداری برگردانده شده را از دست می دهیم.

جهت حل این موضوع می توانیم از جنریک به صورت زیر استفاده نماییم.

در فانکش فوق تایپ متغیر پاس شده را یک مجهول به صورت <X> تعریف کردیم که متواند هر عبارتی که شما می خواهید باشد مانند XXX یا T یا .... و در این فانکشن تعیین می کند که هر تایپی به این فانکشن پاس شود این فانکشن موظف است همان نوع یا تایپ را برگرداند یعنی عدد به آن پاس کردیم به ما عدد بر می گرداند و اگر متن یا string به آن پاس کردیم به ما متن بر می گرداند و قصه الی هذا و به این طریق در تایپ اسکریپت جنریک تعریف می شود و یا به عبارتی به این نوع فانکش جنریک گفته می شود

حال که ما فانکشن جنریک identify را نوشتیم به دو صورت زیر می توانیم آن را صدا بزنیم

روش اول صدا زدن فانکشن با تمام آرگومان ها و تعیین نوع آرگومان به صورت زیر.

همانطور که در روش فوق می بینیم به صورت صریح گفتیم تایپ X از نوع string است

و روش دوم به صورت صریح تایپ آرگومان پاس شده را به صورت زیر تعیین نمی نماییم و کامپایلر به صورت ضمنی آن را تعیین می نماید.



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

Property 'length' does not exist on type 'T'. متن خطا
Property 'length' does not exist on type 'T'. متن خطا

لذا با یک روش می توانیم نوع آرایه بودن آرگومان را به صورت زیر مشخص نماییم.

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

و به طبع نمی توان فانکش فوق را با یک آرگومان غیر آرایه ای به صورت زیر صدا نمود و خطا داده می شود.



همچنین می توانیم یک فانکشن جنریک را به عنوان یک جنریک تایپ و به صورت یک اینترفیس به صورت زیر تعریف نماییم.

یا می توانیم فانکشن جدیدی که از نوع فانکشن جنریک اصلی تعریف نموده ایم را محدود به تایپ جدیدی مثلا عددی به صورت زیر نماییم.

و به همین ترتیب می توانیم جنریک کلاس را شبیه ایترفیس به صورت زیر تعریف نماییم.

و متد کلاس فوق را می توانیم به صورت متنی عوض نماییم و این زیبایی جنریک است و قابلیت استفاده مجدد را برای ما به ارمغان می آورد.

https://vrgl.ir/Esoch


https://vrgl.ir/zsWeG


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