Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Java record

📖توضیحات درس

🎬 آشنایی با Record در Java ☕ توی این ویدیو قراره یکی از ویژگی‌های مدرن و جذاب جاوا یعنی record رو یاد بگیریم 🚀 اول با یه مثال واقعی از دنیای کلاس‌ها می‌بینیم چه مشکلی باعث شد رکوردها معرفی بشن، بعد هم همون کد رو با استفاده از رکوردها ریفکتور (refactor) می‌کنیم تا ببینیم چطور می‌تونیم کد تمیزتر، خلاصه‌تر و ایمن‌تری بنویسیم 💡 در طول ویدیو به نکات زیر هم اشاره می‌کنیم: 🔹 تفاوت Record با Class 🔹 حذف boilerplate code به سبک مدرن جاوا 🔹 نحوه تعریف و استفاده از رکوردها در پروژه‌های واقعی 🔹 مرور نهایی و جمع‌بندی برای درک بهتر 📚 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی داخل گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 🙌
00:14:30🎯رایگان

📄جزوه

مفاهیم کلیدی

  • Boilerplate Code کدهای تکراری و کلیشه‌ای (مانند Getters ،Constructors ،equals و hashCode) که برای ایجاد یک کلاس ساده حامل داده باید نوشته شوند و باعث شلوغی پروژه می‌گردند.

  • Immutable اشیاء تغییرناپذیر؛ به این معنا که پس از مقداردهی اولیه در Constructor ، دیگر نمی‌توان مقادیر آن‌ها را تغییر داد. در Recordها، تمام فیلدها به صورت پیش‌فرض final هستند.

  • Java Record یک ویژگی که از جاوا ۱۴ اضافه شد و به برنامه‌نویس اجازه می‌دهد کلاس‌های حامل داده (Data Carrier) را با کمترین میزان کدنویسی تعریف کند.

  • Data Transfer Object (DTO) کلاس‌هایی که صرفاً برای جابه‌جایی داده‌ها بین لایه‌های مختلف برنامه (مثلاً از لایه دیتابیس به لایه نمایش) استفاده می‌شوند و منطق تجاری پیچیده‌ای ندارند.

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

  • هدف اصلی از معرفی Record در جاوا چیست؟ هدف اصلی، کاهش کدهای تکراری (Boilerplate) و ایجاد کلاس‌هایی است که هدفشان فقط نگهداری و جابه‌جایی داده‌های تغییرناپذیر (Immutable) است.

  • تفاوت نام‌گذاری متدهای Getter در Record با کلاس‌های معمولی چیست؟ در کلاس‌های معمولی، متدها با پیشوند get شروع می‌شوند (مثل getAge)، اما در Recordها، نام متد دقیقاً همان نام فیلد است (مثل age()).

  • آیا در یک Record می‌توان مقدار فیلدها را پس از ساخته شدن تغییر داد؟ خیر، فیلدهای یک Record به صورت private final تعریف می‌شوند و هیچ متد Setter برای آن‌ها تولید نمی‌شود، بنابراین کاملاً تغییرناپذیر هستند.

  • چه متدهایی به صورت خودکار توسط کامپایلر برای یک Record تولید می‌شوند؟ کامپایلر به صورت خودکار متدهای equals() ،hashCode() ،toString()، یک Public Constructor و متدهای دسترسی به فیلدها (Getters) را ایجاد می‌کند.

  • آیا امکان تعریف متدها یا متغیرهای Static در Record وجود دارد؟ بله، مشابه کلاس‌های معمولی، می‌توان در Recordها نیز متغیرها و متدهای static تعریف کرد.

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

فرض کنید یک موجودیت (Entity) در دیتابیس به نام Person دارید که فیلدهای زیادی دارد. اما برای ارسال داده به سمت کلاینت (مثلاً فرانت‌اند)، فقط به سه فیلد firstName ،lastName و age نیاز دارید.

در حالت سنتی، باید یک کلاس SimplePerson می‌ساختید که حدود ۵۰ خط کد (شامل فیلدها، سازنده، گترها و...) داشت. اما با استفاده از Record می‌توانید این کار را در یک خط انجام دهید: public record SimplePerson(String firstName, String lastName, int age) { }

این کار باعث می‌شود هدف کد شفاف‌تر شود و هر کسی با دیدن این خط متوجه شود که این ساختار صرفاً برای جابه‌جایی این سه فیلد داده‌ای است.

بیشتر بدانید

  • ساختار تعریف Record برای تعریف، به جای کلمه کلیدی class از record استفاده می‌شود و فیلدها در پرانتز مقابل نام آن تعریف می‌شوند.

  • دسترسی به فیلدها برای دسترسی به داده‌ها در یک شیء رکورد به نام person ، به جای استفاده از person.getFirstName() باید از person.firstName() استفاده کنید.

  • کاهش خطای انسانی استفاده از Record باعث می‌شود اشتباهاتی که ممکن است هنگام نوشتن دستی متدهای equals یا hashCode رخ دهد (مثلاً فراموش کردن یک فیلد جدید)، به کلی حذف شوند زیرا کامایلر مدیریت آن‌ها را بر عهده دارد.