جلسه شماره 83رایگان

Generic in java First section

00:12:01

توضیحات جلسه

🎥 این ویدیو قسمت هفتاد و ششم از بوت‌کمپ رایگان جاواست. 📚 Generics in Java – مقدمه کامل و اصول پایه جنریک‌ها در این جلسه وارد یکی از مهم‌ترین مباحث پیشرفته جاوا می‌شیم: جنریک‌ها (Generics). توی این ویدیو اول از همه یک تعریف شفاف و قابل‌فهم از مفهوم جنریک ارائه می‌کنیم و بعد با مثال‌های واقعی بررسی می‌کنیم که اگه جنریک نداشتیم چه مشکلاتی به وجود میاد و چرا Type Casting با Object می‌تونه خطرناک و دردسرساز باشه. در این جلسه یاد می‌گیریم: ✨ جنریک چیست و چرا در جاوا اهمیت زیادی دارد ⚠️ مشکل‌های رایج در نبود جنریک و خطاهای احتمالی 🔄 تفاوت کدنویسی با Object و مزایای تایپ ایمنی در جنریک‌ها 🛡️ جلوگیری از ClassCastException با استفاده اصولی از Generics 📘 چرا استفاده از Generics باعث تمیزتر و قابل اعتمادتر شدن کد می‌شود در انتهای جلسه یک مرور کامل داریم تا دید بهتری نسبت به مفهوم جنریک پیدا کنید و آمادگی ورود به مباحث پیشرفته‌تر را داشته باشید. لینک داکیومنت تدریس: https://github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/document/generic 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی می‌تونی داخل گروه بپرسی؛ من یا مربی‌های گروه با حوصله کمکتون می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار 🔥 اگر قصد داری مفاهیم جاوا رو اصولی و حرفه‌ای یاد بگیری، این پلی‌لیست مخصوص توئه!

جزوه و مستندات

مفاهیم کلیدی

  • Generics

ویژگی‌ای در جاوا است که به برنامه‌نویس اجازه می‌دهد نوع داده‌ها را به‌صورت پارامتری تعیین کند. این ابزار مانند قالب‌هایی عمل می‌کند که می‌توان آن‌ها را با انواع مختلف داده، مانند String، Integer یا کلاس‌های سفارشی، استفاده کرد؛ بدون اینکه نیاز به بازنویسی کد باشد.

  • Type Safety

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

  • Casting

فرآیند تبدیل صریح یک شیء از نوع عمومی، مانند Object، به یک نوع خاص‌تر، مانند Person، است. پیش از معرفی Generics، برای بازیابی داده‌ها از لیست‌های عمومی، استفاده از Casting الزامی بود.

  • ClassCastException

یک خطا یا Exception است که در زمان اجرا، یعنی Runtime، رخ می‌دهد. این خطا زمانی ایجاد می‌شود که برنامه سعی کند شیئی را به کلاسی تبدیل کند که با آن سازگار نیست؛ برای مثال، تبدیل یک خودرو به یک انسان.

  • Compile Time در برابر Runtime

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

  • Code Reusability

به معنای قابلیت استفاده مجدد از کد است. Generics اجازه می‌دهد یک کلاس یا متد را یک‌بار بنویسیم و با انواع مختلف داده از آن استفاده کنیم. این کار باعث تمیزتر شدن و بهینه‌تر شدن برنامه می‌شود.

موارد مصاحبه ای

  • چرا استفاده از Generics نسبت به استفاده از کلاس Object برتری دارد؟

هرچند کلاس Object امکان ذخیره‌سازی هر نوع داده‌ای را فراهم می‌کند و باعث Reusability می‌شود، اما امنیت نوع ندارد. هنگام استفاده از Object، خطاهای مربوط به Casting در زمان اجرا، یعنی Runtime، مشخص می‌شوند و می‌توانند باعث کرش برنامه شوند. اما با استفاده از Generics، این خطاها در زمان کامپایل، یعنی Compile Time، شناسایی می‌شوند.

  • مزایای اصلی استفاده از Generics در جاوا چیست؟

۱. افزایش امنیت نوع، یعنی Type Safety.

۲. حذف نیاز به Explicit Casting یا تبدیل دستی نوع.

۳. شناسایی باگ‌ها در زمان کامپایل.

۴. کدنویسی تمیزتر و قابلیت استفاده مجدد از کد.

  • Generics از کدام نسخه به جاوا اضافه شد؟

این ویژگی از نسخه Java 5 به جاوا اضافه شد.

  • در چه بخش‌هایی از برنامه می‌توان از Generics استفاده کرد؟

Generics در کلاس‌ها، مانند کلاس Stack، متدها و اینترفیس‌ها، مانند Comparable یا Iterator، قابل استفاده است.

سناریو کاربردی

در این آموزش، یک کلاس DynamicArray، یعنی لیست پویا، بررسی شده است که از آرایه‌ای از جنس Object برای ذخیره داده‌ها استفاده می‌کند.

مشکل سناریو بدون جنریک:

وقتی می‌خواهیم اشیایی از کلاس Person را در این لیست ذخیره کنیم، هنگام بازپس‌گیری داده، خروجی متد از نوع Object است. برای دسترسی به ویژگی‌های کلاس Person، مانند متد printFullName، مجبوریم خروجی را به Person تبدیل کنیم.

خطر جدی:

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

راهکار با جنریک:

با استفاده از Generics، از همان ابتدا به لیست اعلام می‌کنیم که فقط اجازه ورود و خروج داده‌هایی از نوع Person را دارد. در این حالت، دیگر نیازی به نوشتن کدهای مربوط به Casting نیست. اگر اشتباهی در نوع داده رخ دهد، کامپایلر اجازه اجرای برنامه را نمی‌دهد و همان لحظه به برنامه‌نویس هشدار می‌دهد.

بیشتر بدانید

  • کاربرد در کتابخانه‌های جاوا

مفهوم Generics به‌صورت گسترده در ساختار Collectionهای جاوا و اینترفیس‌های مهمی مانند Comparable و Function استفاده شده است.

  • تمیزی کد یا Clean Code

استفاده از Generics باعث می‌شود کدهای اضافه مربوط به تبدیل انواع، یعنی Casting، حذف شوند. این موضوع خوانایی کد را افزایش می‌دهد و نگهداری آن را آسان‌تر می‌کند.