Records در Java
با record یک نوع دادهٔ فشرده بسازید و اجزایش را بخوانید. در Card.java یک record Tag(String name) {} با دسترسی package-private نگه دارید، کلاس عمومی Card را نگه دارید، Tag t = new Tag("oak"); بسازید، و t.name() را چاپ کنید. با javac Card.java ترجمه کنید و java Card را اجرا کنید. صفحه باید oak را نشان دهد. دموی دوم یک جزء int اضافه میکند تا صفحه oak و بعد 3 را نشان دهد. JUnit اختیاری را برای صفحهٔ بعد بگذارید. این درس record با accessor است، نه خط لولهٔ Streams و نه قدمزدن Lambda با forEach.
یک جزء، یک accessor
Card.java را باز کنید. نام کلاس عمومی را Card نگه دارید. دموهای باقیماندهٔ Streams با Pipe، چاپهای باقیماندهٔ lambda با Cue، لیستهای باقیماندهٔ generics با Bin، و پرسوجوهای باقیماندهٔ Scanner در Box را پاک کنید اگر داستان Records را میپوشانند. برنامه نباید منتظر تایپ شما بماند و نباید خط لولهٔ stream را شروع کند.
بالای کلاس عمومی، record را اعلام کنید:
record Tag(String name) {}
داخل Card.main یک نمونه بسازید و accessor را چاپ کنید:
Tag t = new Tag("oak");
System.out.println(t.name());
سربرد record اجزا را داخل پرانتز فهرست میکند. Java سازنده و accessorی name() را برای آن جزء میسازد. صفحه oak را نشان میدهد.
record Tag(String name) {}
public class Card {
public static void main(String[] args) {
Tag t = new Tag("oak");
System.out.println(t.name());
}
}
از پوشهای که Card.java در آن است javac Card.java را اجرا کنید. وقتی آکولادها و پرانتزها جور باشند، javac خط جداگانهای از خودش چاپ نمیکند. بعد java Card را بزنید — نه java Card.java و نه java Tag. یک کلاس عمومی نگه دارید تا نام اجرا با Card یکی بماند. recordی Tag در همان فایل package-private میماند.
یکبار اجرا را قدمبهقدم ببینید. Java از Card.main شروع میکند. new Tag("oak") جزء را ذخیره میکند. t.name() مقدار "oak" را برمیگرداند. println مقدار oak را مینویسد. هیچچیز stream() را صدا نمیزند. هیچچیز forEach را صدا نمیزند. هیچچیز args[0] را نمیخواند.
همانطور که صفحه را نگاه میکنید قانون مبتدی را بگویید: record نوع و اجزایش را نام میبرد؛ accessor همان نام جزء را دارد؛ با new میسازید. روی این صفحه دمو JUnit نسازید. JUnit منتظر درس اختیاری بعدی است. record را با کلاس دستی بلند پر از getter در فایل آموزشی عوض نکنید — سربرد record را نگه دارید.
اگر هنوز از فایل باقیماندهٔ Pipe streams مقدار OAK و بعد PINE میبینید، به Card بروید و t.name() را نگه دارید. اگر javac از دو نوع عمومی شکایت کرد، فقط Card عمومی بماند و record Tag بدون public بماند.
دو جزء، دو چاپ
همان کلاس عمومی Card را نگه دارید. record را به دو جزء گسترش دهید:
record Tag(String name, int n) {}
Tag t = new Tag("oak", 3);
System.out.println(t.name());
System.out.println(t.n());
دوباره با javac Card.java ترجمه کنید و java Card را اجرا کنید. صفحه oak و بعد 3 را نشان میدهد. هر جزء accessorی با همان نام میگیرد. ترتیب در سربرد با آرگومانهای سازنده یکی است.
record Tag(String name, int n) {}
public class Card {
public static void main(String[] args) {
Tag t = new Tag("oak", 3);
System.out.println(t.name());
System.out.println(t.n());
}
}
یکبار اجرا را قدمبهقدم ببینید. name() مقدار "oak" را برمیگرداند. n() مقدار 3 را برمیگرداند. دو دمو را بهعنوان دو شکل آموزشی نگه دارید. اول یک جزء را ثابت کنید. بعد دو جزء را. هر دو شکل یک recordِ package-private کنار Card عمومی دارند.
اگر آرگومانهای سازنده را جابهجا کنید، مقادیر در اجزای اشتباه مینشینند. در فایل آموزشی که نگه میدارید "oak" اول و 3 دوم بماند.
عادتهای record
سربرد فشرده و accessorها را با هم هنگام تمرین نگه دارید.
📊 Record habits for Card
| عادت | شکل | بررسی مبتدی |
|---|---|---|
| اعلام | record Tag(String name) {} |
اجزا در سربرد مینشینند |
| ساخت | new Tag("oak") |
آرگومانها ترتیب اجزا را دنبال میکنند |
| خواندن | t.name() |
نام accessor با جزء یکی است |
| دو فیلد | record Tag(String name, int n) {} |
هر جزء accessor خودش را دارد |
| کلاس عمومی | public class Card |
با java Card اجرا کنید، نه java Tag |
Records نه Streams و نه JUnit
Streams با filter و map مقدارها را در خط لوله عبور میدهد. Records مجموعهٔ ثابتی از اجزا را در نوعی فشرده نگه میدارند. JUnit در صفحهٔ اختیاری بعدی رفتار را با تست چک میکند. امروز این سه نقش را در یک فایل مبتدی قاطی نکنید.
oak اینجا مقدار جزء record است که name() برمیگرداند. نتیجهٔ filter در stream نیست و فقط بازدید Lambda با forEach نیست. وقتی فایل باقیماندهٔ Pipe هنوز کلمات mapشدهٔ بزرگ چاپ میکند، آن را تاریخچه بگذارید و خط t.name() در Card را نگه دارید.
بدون کلیدواژهٔ record، سربرد فشردهٔ این صفحه از بین میرود. بدون آرگومانهای سازندهٔ منطبق، javac فراخوانی را رد میکند. سربرد و خط new را موقع تمرین هر دمو همراستا نگه دارید. annotationهای JUnit را تا آن درس از این صفحه دور نگه دارید، حتی اگر سرخط تست را جای دیگر در مسیر اختیاری دیده باشید. شکل کوتاه record را ترجیح دهید تا صفحه به name() و n() در هر خواندن دقیق از فایل آموزشی گره بخورد.
بررسی پوشه قبل از JUnit
بعد از کامپایل موفق پوشه را لیست کنید. باید Card.java و Card.class را با هم ببینید، و معمولاً Tag.class برای record. سورس را ویرایش کنید، ذخیره کنید، javac Card.java را بزنید، بعد java Card را اجرا کنید. اگر بعد از اضافه کردن n دوباره کامپایل نکنید، .class قدیمی ممکن است صفحهٔ تکخطی قدیمی نشان دهد.
اگر javac از کلاسهای عمومی تکراری شکایت کرد، فقط Card عمومی بماند. اگر صفحه بهجای oak مقدار Tag[oak] نشان داد، کل record را چاپ کردهاید — چاپ آموزشی را t.name() نگه دارید. اگر چیزی چاپ نشد، تأیید کنید main هنوز println را صدا میزند.
stream().map از Pipe را داخل Card نچسبانید. forEach از Cue را جایگزین داستان record نکنید. کار اختیاری Records نوع فشرده با accessor است.
قبل از JUnit اختیاری
میتوانید record Tag(String name) {} را نگه دارید، new Tag("oak") بسازید، t.name() را بهصورت oak چاپ کنید، بعد record Tag(String name, int n) {} را داشته باشید و oak و 3 را چاپ کنید. با javac Card.java ترجمه کنید و java Card را اجرا کنید. جدول اعلام، ساخت و خواندن را از هم جدا میکند. صفحهٔ اختیاری بعدی JUnit است.
دموهای Card را برای جفت واضح Records نگه دارید. فایلهای Pipe streams را هنگام تمرین record از این صفحه دور نگه دارید. فایلهای lambda با Cue را هنگام تمرین record از این صفحه دور نگه دارید. کار JUnit را تا آن درس از این صفحه دور نگه دارید. این عادتها نقطهٔ عبور قبل از ادامهٔ مسیر هستند. وقتی صفحهٔ تکفیلدی oak یا صفحهٔ دوفیلدی oak و بعد 3 را نشان میدهد، Records کار این درس را کرده و اگر مسیر اختیاری را ادامه دهید برای JUnit آمادهاید.
یک نوبت آخر روی پوشه: یک Card عمومی، record Tag با package-private، آرگومانهای سازندهٔ منطبق، چاپ accessor، بدون انتظار Scanner، بدون خط لولهٔ stream. یکبار دیگر javac Card.java و java Card را روی دمویی که باز نگه داشتهاید بزنید. اگر صفحه هنوز oak یا oak و بعد 3 را نشان میدهد، شکل Records محکم است و دوره میتواند به JUnit اختیاری در صفحهٔ بعد برود. برای هر خواندن یک عادت record روشن نگه دارید تا هر بار همان نقشه را یاد بگیرید.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود