💎 پیمایش لیست با ListIterator
🔗 در مورد ایتریتور از اینجا بخوانید
🔆 مانند ایتریتور، لیست ایتریتور نیز مانند ایتریتور برای پیمایش یک به یک ایتم های یک لیست به کار برده میشود و البته بر خلاف ایتریتور، لیست ایتریتور میتواند در هر دو جهت جابجا شود و همینطور بر خلاف ایتریتور هر چهار عملیات CRUD را پشتیبانی میکند.
🔷 ———CRUD———
🔹CREATE: اضافه کردن یک ایتم جدید به ابجکت کالکشن
🔹READ: بازخوانی ایتم های موجود در ابجکت کالکشن
🔹UPDATE: تغییر و یا مقدار دهی دوباره یک ایتم موجود در ابجکت کالکشن
🔹DELETE: حذف یک آیتم از ابجکت کالکشن
لیست ایتریتور علاوه بر اینکه متد های واسط ایتریتور را پیاده سازی میکند، شامل متد های زیر نیز میشود:
🟡 add(E e)
اضافه کردن یک آیتم داخل لیست
🟡 hasNext()
این متد بررسی میکند در صورتی که ایتمی برای پیمایش رو به جلو وجود داشته باشد، مقدار ترو را بازگشت میدهد.
🟡 hasPrevious()
این متد در صورتی که آیتمی برای پیمایش رو به عقب وجود داشته باشد، مقدار ترو را بازگشت میدهد.
🟡 next()
ایتم بعدی موجود در لیست را بازگشت میدهد.
🟡 nextIndex()
اندیس آیتم بعد از فراخوانی next() را بازگشت میدهد.
🟡 previous()
آیتم قبلی موجود در لیست را بازگشت میدهد
🟡 previousIndex()
اندیس آیتم قبلی بعد از فراخوانی previous را بازگشت میدهد.
🟡 remove()
آخرین آیتمی که توسط متد previous یا next بازگشت داده شده است را حذف میکند.
🟡 set(E e)
آخرین آیتم بازگشت داده شده توسط next و یا previous را مقدار دهی میکند.
#ListIterator
———
☕️@piecejava
🔗 در مورد ایتریتور از اینجا بخوانید
🔆 مانند ایتریتور، لیست ایتریتور نیز مانند ایتریتور برای پیمایش یک به یک ایتم های یک لیست به کار برده میشود و البته بر خلاف ایتریتور، لیست ایتریتور میتواند در هر دو جهت جابجا شود و همینطور بر خلاف ایتریتور هر چهار عملیات CRUD را پشتیبانی میکند.
🔷 ———CRUD———
🔹CREATE: اضافه کردن یک ایتم جدید به ابجکت کالکشن
🔹READ: بازخوانی ایتم های موجود در ابجکت کالکشن
🔹UPDATE: تغییر و یا مقدار دهی دوباره یک ایتم موجود در ابجکت کالکشن
🔹DELETE: حذف یک آیتم از ابجکت کالکشن
لیست ایتریتور علاوه بر اینکه متد های واسط ایتریتور را پیاده سازی میکند، شامل متد های زیر نیز میشود:
🟡 add(E e)
اضافه کردن یک آیتم داخل لیست
🟡 hasNext()
این متد بررسی میکند در صورتی که ایتمی برای پیمایش رو به جلو وجود داشته باشد، مقدار ترو را بازگشت میدهد.
🟡 hasPrevious()
این متد در صورتی که آیتمی برای پیمایش رو به عقب وجود داشته باشد، مقدار ترو را بازگشت میدهد.
🟡 next()
ایتم بعدی موجود در لیست را بازگشت میدهد.
🟡 nextIndex()
اندیس آیتم بعد از فراخوانی next() را بازگشت میدهد.
🟡 previous()
آیتم قبلی موجود در لیست را بازگشت میدهد
🟡 previousIndex()
اندیس آیتم قبلی بعد از فراخوانی previous را بازگشت میدهد.
🟡 remove()
آخرین آیتمی که توسط متد previous یا next بازگشت داده شده است را حذف میکند.
🟡 set(E e)
آخرین آیتم بازگشت داده شده توسط next و یا previous را مقدار دهی میکند.
#ListIterator
———
☕️@piecejava
Telegram
تیکه پاره های جاوا
💎 پیمایش کالکشن ها با Iterator
🔆 ایتریتور یک واسط است که برای پیمایش ترتیبی یک کالکشن (مانند ست، اری لیست، لینکدلیست و...) به کار برده میشود.
🔅 ایتریتور اصطلاحا یک ایتریتورِ universal میباشد. یعنی از این واسط میتوان برای همه ی کالکشن ها استفاده کرد. در…
🔆 ایتریتور یک واسط است که برای پیمایش ترتیبی یک کالکشن (مانند ست، اری لیست، لینکدلیست و...) به کار برده میشود.
🔅 ایتریتور اصطلاحا یک ایتریتورِ universal میباشد. یعنی از این واسط میتوان برای همه ی کالکشن ها استفاده کرد. در…
👍10
💎 حافظه استک
🔆 حافظه استک در واقع فضاییست که به اجرا شدن توابع، داده های نوع پیشین، متغیر های محلی و متغیر های مرجع موجود در توابع اختصاص داده شده است. دسترسی به حافظه استک بصورت خروج به ترتیب عکس ورود یا Last in First Out میباشد. هر متدی که اجرا میشود در حافظه استک یک بلاک حافظه به آن اختصاص داده میشود و هر داده پیشین و ارجاع به آبجکت های موجود در بدنه متد، در این بلاک حافظه ذخیره میشود. وقتی متد بصورت کامل اجرا میشود، بلاک حافظه از حافظه استک حذف و این حافظه برای استفاده مجدد در دسترس قرار میگیرد. عمر مقادیر و داده های موجود در حافظه استک وابسته به زمان اجرای متدی است که این مقادیر را در حافظه ایجاد کرده است.
طول حافظه استک ثابت میباشد و بعد از ایجاد شدن قابل تغییر نیست. خطای استک اور فلو (سر ریز پشته) نیز زمانی که استک پر شده باشد رخ میدهد. یعنی دقیقا زمانی که هیچ حافظه ای برای اجرا شدن متد بعدی وجود نداشته باشد. برای مثال وقتی که یک متد بازگشتی بی نهایت بار خودش را صدا بزند:
public static int recursiveFunc(){
return recursiveFunc();
}
#Stack #Stack_Memory #Memory
———
☕️@PieceJava
🔆 حافظه استک در واقع فضاییست که به اجرا شدن توابع، داده های نوع پیشین، متغیر های محلی و متغیر های مرجع موجود در توابع اختصاص داده شده است. دسترسی به حافظه استک بصورت خروج به ترتیب عکس ورود یا Last in First Out میباشد. هر متدی که اجرا میشود در حافظه استک یک بلاک حافظه به آن اختصاص داده میشود و هر داده پیشین و ارجاع به آبجکت های موجود در بدنه متد، در این بلاک حافظه ذخیره میشود. وقتی متد بصورت کامل اجرا میشود، بلاک حافظه از حافظه استک حذف و این حافظه برای استفاده مجدد در دسترس قرار میگیرد. عمر مقادیر و داده های موجود در حافظه استک وابسته به زمان اجرای متدی است که این مقادیر را در حافظه ایجاد کرده است.
طول حافظه استک ثابت میباشد و بعد از ایجاد شدن قابل تغییر نیست. خطای استک اور فلو (سر ریز پشته) نیز زمانی که استک پر شده باشد رخ میدهد. یعنی دقیقا زمانی که هیچ حافظه ای برای اجرا شدن متد بعدی وجود نداشته باشد. برای مثال وقتی که یک متد بازگشتی بی نهایت بار خودش را صدا بزند:
public static int recursiveFunc(){
return recursiveFunc();
}
#Stack #Stack_Memory #Memory
———
☕️@PieceJava
👍10
⭕️ لینک های دسترسی سریع:
💎 چرا در یک فایل جاوا ( .java ) فقط یک کلاس public میتونیم داشته باشیم؟
💎 چرا پردازش یک آرایه مرتب بسیار سریع تر از پردازش یک آرایه نامرتب است؟
💎 چرا متد های آرایه در جاوا قابل دسترسی نیست!!؟
💎 مفهوم استخر رشته (String pool) و کارایی آن در جاوا
💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟
⁉️دقیقا چطور با حلقه های تو در تو الگو هارو چاپ میکنن؟
💎 لینکدلیست استفاده کنیم یا اری لیست؟
❓ چطور خطای Could Not Find or Load Main Class رو برطرف کنیم!؟
...
☕️ @PIECEJAVA
💎 چرا در یک فایل جاوا ( .java ) فقط یک کلاس public میتونیم داشته باشیم؟
💎 چرا پردازش یک آرایه مرتب بسیار سریع تر از پردازش یک آرایه نامرتب است؟
💎 چرا متد های آرایه در جاوا قابل دسترسی نیست!!؟
💎 مفهوم استخر رشته (String pool) و کارایی آن در جاوا
💎چرا رشته ها غیر قابل تغییر یا Immutable هستند؟
⁉️دقیقا چطور با حلقه های تو در تو الگو هارو چاپ میکنن؟
💎 لینکدلیست استفاده کنیم یا اری لیست؟
❓ چطور خطای Could Not Find or Load Main Class رو برطرف کنیم!؟
...
☕️ @PIECEJAVA
Telegram
تیکه پاره های جاوا
#چرا
💎 چرا در یک فایل جاوا ( .java ) فقط یک کلاس public میتونیم داشته باشیم؟
🔗 در مورد سطوح دسترسی از اینجا بخوانید
🟡 همونطور که میدونید داخل فایل جاوا میشه همزمان چند کلاس داشت ولی فقط یک کلاس سطح دسترسی پابلیک داره. برای مثال فایل X.java زیر را در نظر…
💎 چرا در یک فایل جاوا ( .java ) فقط یک کلاس public میتونیم داشته باشیم؟
🔗 در مورد سطوح دسترسی از اینجا بخوانید
🟡 همونطور که میدونید داخل فایل جاوا میشه همزمان چند کلاس داشت ولی فقط یک کلاس سطح دسترسی پابلیک داره. برای مثال فایل X.java زیر را در نظر…
👍4
💎 حافظه هیپ
حافظه هیپ در ذخیره آبجکت های ایجاد شده در زمان اجرای یک برنامه جاوا بسیار موثر است. البته مسیر ارجاع به آبجکت ایجاد شده همچنان در حافظه استک ذخیره میشود که به همان آبجکت ایجاد شده در حافظه هیپ اشاره میکند. حافظه هیپ در مقایسه با حافظه استک، فضای خیلی بزرگتری در اختیار دارد. در حافظه هیپ ابجکت های بلااستفاده توسط گاربیج کالکتور برای ازاد سازی حافظه حذف میشوند.
🔗 درباره گاربیج کالکشن از اینجا بخوانید
🔆 تقسیم بندی حافظه هیپ
حافظه هیپ به سه بخش تقسیم میشود: نسل جدید، نسل قدیم و نسل دائمی.
🔅نسل جدید
نسل جدید بخشی است که به آبجکت های تازه ایجاد شده اختصاص داده میشود. نسل جدید نیز به سه بخش Eden و Survivor 1 و Survivor 2 تقسیم میشود. در ابتدا تمامی آبجکت ها در داخل حافظه Eden قرار گرفته میشوند. پس از پر شدن حافظه Eden، یک گاربیج کالکشن جزئی اتفاق می افتد تا آبجکت های بلااستفاده از سطح حافظه حذف شوند. در این حالت آبجکت های باقیمانده به بخش Survivor 1 و سپس به بخش Survivor 2 انتقال میابند.
🔅نسل قدیم
در ادامه آبجکت های باقیمانده به بخش نسل قدیم انتقال می یابند. در این بخش معمولا کمی از ابجکت ها دوباره توسط گاربیج کالکشن جمع اوری میشوند تا این اطمینان حاصل شود که در این بخش فقط ابجکت های ماندگار وجود دارند.
🔅نسل دائمی
در این بخش JVM برای ذخیره متادیتا (فراداده) در مورد کلاس ها و متد ها استفاده میکند. البته یک نظر اینجا وجود دارد که بیان میکند نسل دائمی جزئی از حافظه هیپ نیست و به یک بخش دیگر اختصاص دارد.
🚫 استثنای OutOfMemoryError
اگر یک ابجکت وجود داشته باشد که فضایی بیشتر از فضای موجود در حافظه هیپ در بر داشته باشد، استثنای OutOfMemoryError رخ خواهد داد. برای مثال:
public class ITHooloo {
public static void main(String[] args) {
int[] array = new int[1000*1000*1000];
}
}
🔗درباره حافظه استک از اینجا بخوانید
#Heap_Memory #Memory #Heap
———
☕️ @PIECEJAVA
حافظه هیپ در ذخیره آبجکت های ایجاد شده در زمان اجرای یک برنامه جاوا بسیار موثر است. البته مسیر ارجاع به آبجکت ایجاد شده همچنان در حافظه استک ذخیره میشود که به همان آبجکت ایجاد شده در حافظه هیپ اشاره میکند. حافظه هیپ در مقایسه با حافظه استک، فضای خیلی بزرگتری در اختیار دارد. در حافظه هیپ ابجکت های بلااستفاده توسط گاربیج کالکتور برای ازاد سازی حافظه حذف میشوند.
🔗 درباره گاربیج کالکشن از اینجا بخوانید
🔆 تقسیم بندی حافظه هیپ
حافظه هیپ به سه بخش تقسیم میشود: نسل جدید، نسل قدیم و نسل دائمی.
🔅نسل جدید
نسل جدید بخشی است که به آبجکت های تازه ایجاد شده اختصاص داده میشود. نسل جدید نیز به سه بخش Eden و Survivor 1 و Survivor 2 تقسیم میشود. در ابتدا تمامی آبجکت ها در داخل حافظه Eden قرار گرفته میشوند. پس از پر شدن حافظه Eden، یک گاربیج کالکشن جزئی اتفاق می افتد تا آبجکت های بلااستفاده از سطح حافظه حذف شوند. در این حالت آبجکت های باقیمانده به بخش Survivor 1 و سپس به بخش Survivor 2 انتقال میابند.
🔅نسل قدیم
در ادامه آبجکت های باقیمانده به بخش نسل قدیم انتقال می یابند. در این بخش معمولا کمی از ابجکت ها دوباره توسط گاربیج کالکشن جمع اوری میشوند تا این اطمینان حاصل شود که در این بخش فقط ابجکت های ماندگار وجود دارند.
🔅نسل دائمی
در این بخش JVM برای ذخیره متادیتا (فراداده) در مورد کلاس ها و متد ها استفاده میکند. البته یک نظر اینجا وجود دارد که بیان میکند نسل دائمی جزئی از حافظه هیپ نیست و به یک بخش دیگر اختصاص دارد.
🚫 استثنای OutOfMemoryError
اگر یک ابجکت وجود داشته باشد که فضایی بیشتر از فضای موجود در حافظه هیپ در بر داشته باشد، استثنای OutOfMemoryError رخ خواهد داد. برای مثال:
public class ITHooloo {
public static void main(String[] args) {
int[] array = new int[1000*1000*1000];
}
}
🔗درباره حافظه استک از اینجا بخوانید
#Heap_Memory #Memory #Heap
———
☕️ @PIECEJAVA
Telegram
کانال تیکه پاره های جاوا
♻️ مفهوم گاربیج کالکشن (Garbage Collection) در جاوا
🟡 گاربیج کالکشن (زباله روب) یک ویژگی جاوا برای مدیریت حافظه است. گاربیج کالکشن اشیا بلا استفاده در سطح حافظه را حذف میکند.
🔰 مثال زیر رو در نظر بگیرید:
Point blank = new Point(3, 4);
blank = null;
خط…
🟡 گاربیج کالکشن (زباله روب) یک ویژگی جاوا برای مدیریت حافظه است. گاربیج کالکشن اشیا بلا استفاده در سطح حافظه را حذف میکند.
🔰 مثال زیر رو در نظر بگیرید:
Point blank = new Point(3, 4);
blank = null;
خط…
❤11
Heap Memory Model.jpg
77.4 KB
🔵 مثال از حافظه هیپ در جاوا
OutOfMemory.jpg
286.7 KB
⭕️ استثنای OutOfMemory
👍12
💎 مقایسه و مرتب سازی اشیا با Comparable
(برای خوانایی بهتر تکه کد ها از تلگرام دسکتاپ استفاده کنید و یا گوشی خود را در حالت افقی نگه دارید )
🔆 اینترفیس Comparable به شی این اجازه را خواهد داد که با یک شی دیگر از جنس خودش مقایسه شود. این مقایسه بر اساس داده های موجود در کلاس انجام میشود. برای مثال مرتب سازی اشیا از کلاس Person بر اساس قد. برای استفاده از Comparable میبایست اینترفیس Comparable را پیاده سازی کرد. این مقایسه توسط متد compareTo صورت میگیرد. ورودی متد، یک ابجکت از نوع همین کلاس میباشد که مشخص میکند مرتب سازی بر اساس کدام داده از کلاس باشد.
🔅برای استفاده از Comparable باید آن را در کلاس موردنظر پیاده سازی کنیم. برای مثال:
1️⃣ اگر در این مقایسه دیتای انتخاب شده از کلاس Y با دیتای کلاس X برابر باشد، خروجی تابع 0 خواهد بود.
2️⃣ اگر در این مقایسه دیتای کلاس Y از دیتای کلاس X کوچکتر باشد، خروجی تابع یک مقدار منفی خواهد بود.
3️⃣ اگر در این مقایسه دیتای کلاس Y از دیتای کلاس X بزرگتر باشد، خروجی تابع یک مقدار مثبت خواهد بود.
🔰 برای مثال در کلاس زیر مقایسه بر اساس قد افراد صورت میگیرد:
🟢 متد Arrays.sort() برای مرتب سازی آرایه کاربرد دارد. در نتیجه برای مرتب سازی آرایه ای شامل اشیا از جنس Member داریم:
Name: Hossein | Height: 190
Name: Reza | Height: 177
Name: Mohammad | Height: 157
Name: Ali | Height: 150
🟢 در رابطه با لیست ها، از متد sort از کلاس Collections میتوان استفاده کرد:
Name: Hossein | Height: 190
Name: Reza | Height: 177
Name: Mohammad | Height: 157
Name: Ali | Height: 150
#Comparable #Arrays #Collections
———
☕️ @PIECEJAVA
(برای خوانایی بهتر تکه کد ها از تلگرام دسکتاپ استفاده کنید و یا گوشی خود را در حالت افقی نگه دارید )
🔆 اینترفیس Comparable به شی این اجازه را خواهد داد که با یک شی دیگر از جنس خودش مقایسه شود. این مقایسه بر اساس داده های موجود در کلاس انجام میشود. برای مثال مرتب سازی اشیا از کلاس Person بر اساس قد. برای استفاده از Comparable میبایست اینترفیس Comparable را پیاده سازی کرد. این مقایسه توسط متد compareTo صورت میگیرد. ورودی متد، یک ابجکت از نوع همین کلاس میباشد که مشخص میکند مرتب سازی بر اساس کدام داده از کلاس باشد.
🔅برای استفاده از Comparable باید آن را در کلاس موردنظر پیاده سازی کنیم. برای مثال:
class T implements Comparable<T> {
@Override
public int compareTo(T t) {
return 0;//by default
}
}
فرض کنید قرار است شی x را با y مقایسه کنیم. از آنجا که خروجی تابع از نوع Int میباشد ، سه حالت در رابطه با compareTo بوجود خواهد آمد:1️⃣ اگر در این مقایسه دیتای انتخاب شده از کلاس Y با دیتای کلاس X برابر باشد، خروجی تابع 0 خواهد بود.
2️⃣ اگر در این مقایسه دیتای کلاس Y از دیتای کلاس X کوچکتر باشد، خروجی تابع یک مقدار منفی خواهد بود.
3️⃣ اگر در این مقایسه دیتای کلاس Y از دیتای کلاس X بزرگتر باشد، خروجی تابع یک مقدار مثبت خواهد بود.
🔰 برای مثال در کلاس زیر مقایسه بر اساس قد افراد صورت میگیرد:
public class Person implements Comparable<Person>{
private String name;
private int height;
public Person(String name, int height) {
this.name = name;
this.height = height;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Person o) {
return o.height - this.height;
}
@Override
public String toString(){
return "Name: " + name + " | Height: "+height;
}
}
حالا از آنجا که کلاس Member اینترفیس Comparable را پیاده سازی میکند، میتوانیم برای مرتب سازی ابجکت ها از سایر متد های مرتب سازی استفاده کنیم. برای مثال:🟢 متد Arrays.sort() برای مرتب سازی آرایه کاربرد دارد. در نتیجه برای مرتب سازی آرایه ای شامل اشیا از جنس Member داریم:
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("Ali",150),
new Person("Hossein", 190),
new Person("Mohammad",157),
new Person("Reza",177)
};
Arrays.sort(people);
for(Person p :people){
System.out.println(p);
}
}
}
==OUTPUT==Name: Hossein | Height: 190
Name: Reza | Height: 177
Name: Mohammad | Height: 157
Name: Ali | Height: 150
🟢 در رابطه با لیست ها، از متد sort از کلاس Collections میتوان استفاده کرد:
public class Main {
public static void main(String[] args) {
List<Person> people = new ArrayList<>(List.of(new Person("Ali",150),
new Person("Hossein", 190),
new Person("Mohammad",157),
new Person("Reza",177)));
Collections.sort(people);
for(Person p: people){
System.out.println(p);
}
}
}
==OUTPUT==Name: Hossein | Height: 190
Name: Reza | Height: 177
Name: Mohammad | Height: 157
Name: Ali | Height: 150
#Comparable #Arrays #Collections
———
☕️ @PIECEJAVA
❤9👍1
Forwarded from تیکه پاره های جاوا اسکریپت
#موقت
چون این پست به محتوای کانال مربوط نمیشه، پیشاپیش از تمامی دوستان عذرخواهی میکنم.
خواستم دو کلام در خصوص حق ناشر یا تولید کننده نرم افزار ها یا کانتنت های غیررایگان فارسی صحبتی با هم داشته باشیم.
به وفور عزیزانی رو می بینیم که تو گروه های تلگرامی به دنبال دریافت رایگان دوره های آکادمی x یا y هستند و رایجاً سه توجیه برای این موضوع دارند
⭕️ اول اینکه چرا ناشر میاد این دوره رو به صورت نامحدود میفروشه
⭕️ دوم اینکه دوره های فارسی بدرد نمی خوره (درواقع اگه تونستم از این دوره کسب درآمد کنم یعنی بدردم خورده و برمیگردم پولش رو هم میدم)
⭕️ و سوم اینکه این دوره خیلی گرونه!!! اینقدر نمیرزه!
به طور کلی خواستم عرض کنم هر مولف یا ناشر مختاره که برای دوره ای که منتشر می کنه شرایطی را تعیین کنه همانطور که منِ مشتری مختارم که آن شرایط را بپذیرم و دوره را خریداری کنم یا اینکه کلاً منصرف بشوم!
تصورش رو بکنید ناشری دوره اش رو به صورت محدود بفروشه! بعد از مدتی تعداد خرید به سقف میرسه و نیازه که برای اون دوره تصمیم گیری ای صورت بگیره، اگر کلاً فروشش رو متوقف کنیم که بعد از مدتی کانتنت فارسی برای موضوعی خاص رو به انقراض میره یا کیفیت دوره های جدید فوق العاده پایین میاد... یا شایدم نیاز باشه مدرس دوره رو مجدداً ضبط کنه (که اصلا عقلانی نیست) و قطعاً اگر بنده بودم با یه ترفند دوره قبلی رو مجدداً منتشر می کردم تا اینکه بیام دوباره حرفمو تو دوره ضبطی جدید تکرار کنم... اگرم دوره رو رایگان بزاریم، تکلیف کسانی که با قیمت بالا دوره رو تهیه کردند چیه؟؟؟ فرض کنید بعد یک هفته سقف تعیین شده پر شد شما هم تو همین یک هفته دوره رو خریداری کردید و بنده در هفته آینده این دوره خیلی گرون رو رایگان دانلود میکنم دیگه خود حدیث مفصل بخوان از این مجمل.
در مورد اینکه کانتنت فارسی بدرد نمیخوره که باید بگم برادر جان، پس دلیل استفادت از کانتنتی که بدرد نمی خوره چیه؟ میخوای بعد از گذروندن 100 ساعت دوره به خودت اثبات کنی که دیدی بدرد نمی خورده؟!
و در مورد فلسفه آخر عزیزانی که میگن گرونه و اینقدر نمیرزه! و حالا که نمیرزه میرم رایگان پیدا و دانلودش میکنم!!! سوالی پیش میاد، تصورش رو بکنید رفتید یه لپ تاپ بخرید فروشنده میگن 40 میلیون قیمتشه! آیا برمیگردید به خودتون بگید نه بابا این لپتاپ اینقدر نمیرزه بجاش امشب میام میدزدمش؟؟؟ (البته دور از جون همتون)
ببخشید دل پری داشتم خوشحال میشم نظر شما دوستان رو هم در این مورد بدونم
چون این پست به محتوای کانال مربوط نمیشه، پیشاپیش از تمامی دوستان عذرخواهی میکنم.
خواستم دو کلام در خصوص حق ناشر یا تولید کننده نرم افزار ها یا کانتنت های غیررایگان فارسی صحبتی با هم داشته باشیم.
به وفور عزیزانی رو می بینیم که تو گروه های تلگرامی به دنبال دریافت رایگان دوره های آکادمی x یا y هستند و رایجاً سه توجیه برای این موضوع دارند
⭕️ اول اینکه چرا ناشر میاد این دوره رو به صورت نامحدود میفروشه
⭕️ دوم اینکه دوره های فارسی بدرد نمی خوره (درواقع اگه تونستم از این دوره کسب درآمد کنم یعنی بدردم خورده و برمیگردم پولش رو هم میدم)
⭕️ و سوم اینکه این دوره خیلی گرونه!!! اینقدر نمیرزه!
به طور کلی خواستم عرض کنم هر مولف یا ناشر مختاره که برای دوره ای که منتشر می کنه شرایطی را تعیین کنه همانطور که منِ مشتری مختارم که آن شرایط را بپذیرم و دوره را خریداری کنم یا اینکه کلاً منصرف بشوم!
تصورش رو بکنید ناشری دوره اش رو به صورت محدود بفروشه! بعد از مدتی تعداد خرید به سقف میرسه و نیازه که برای اون دوره تصمیم گیری ای صورت بگیره، اگر کلاً فروشش رو متوقف کنیم که بعد از مدتی کانتنت فارسی برای موضوعی خاص رو به انقراض میره یا کیفیت دوره های جدید فوق العاده پایین میاد... یا شایدم نیاز باشه مدرس دوره رو مجدداً ضبط کنه (که اصلا عقلانی نیست) و قطعاً اگر بنده بودم با یه ترفند دوره قبلی رو مجدداً منتشر می کردم تا اینکه بیام دوباره حرفمو تو دوره ضبطی جدید تکرار کنم... اگرم دوره رو رایگان بزاریم، تکلیف کسانی که با قیمت بالا دوره رو تهیه کردند چیه؟؟؟ فرض کنید بعد یک هفته سقف تعیین شده پر شد شما هم تو همین یک هفته دوره رو خریداری کردید و بنده در هفته آینده این دوره خیلی گرون رو رایگان دانلود میکنم دیگه خود حدیث مفصل بخوان از این مجمل.
در مورد اینکه کانتنت فارسی بدرد نمیخوره که باید بگم برادر جان، پس دلیل استفادت از کانتنتی که بدرد نمی خوره چیه؟ میخوای بعد از گذروندن 100 ساعت دوره به خودت اثبات کنی که دیدی بدرد نمی خورده؟!
و در مورد فلسفه آخر عزیزانی که میگن گرونه و اینقدر نمیرزه! و حالا که نمیرزه میرم رایگان پیدا و دانلودش میکنم!!! سوالی پیش میاد، تصورش رو بکنید رفتید یه لپ تاپ بخرید فروشنده میگن 40 میلیون قیمتشه! آیا برمیگردید به خودتون بگید نه بابا این لپتاپ اینقدر نمیرزه بجاش امشب میام میدزدمش؟؟؟ (البته دور از جون همتون)
ببخشید دل پری داشتم خوشحال میشم نظر شما دوستان رو هم در این مورد بدونم
👍12👏2
💎 کلاس های رکورد در جاوا
🔆 در جاوا یک روش ذخیره داده ها، استفاده از رکورد است. رکورد یک نوع خاص کلاس در جاوا است و عموما برای ذخیره داده های ساده کاربرد دارد. برای مثال ذخیره داده های فایل CSV.
🔅رکورد بر خلاف کلاس به نوشتن ستر و گتر احتیاج ندارد و یا به عبارتی دارای کد های بلند و غیر ضروری (بویلرپلت کد) نیست. در واقع زمانی که یک رکورد ایجاد میکنید، کمپایلر بصورت خودکار متد های گتر، هش کد و equals و همینطور toString را برای آن ایجاد میکند.
✒️ قواعد (Syntax)
برای ایجاد رکورد از کلیدواژه record استفاده میکنیم و مقابل کلیدواژه رکورد، اسم رکورد (Person) قرار میگیرد. بعد از نام گذاری، باید فیلد های مورد استفاده در رکورد و همینطور نوع آنها را مشخص کنیم:
📝 نحوه استفاده
دقیقا مشابه کلاس ها، برای رکورد هم میتوانیم به راحتی با کلیدواژه new یک نمونه ایجاد کنیم.
Ali
[email protected]
27
Person[name=Ali, [email protected], age=27]
🟡 نکاتی در رابطه با رکورد ها در جاوا
🔸 رکورد یک کلاس فاینال است. در نتیجه قابل ارث بری نیست.
🔸 داده های رکورد، ایممیوتبل (غیرقابل تغییر) اند. در نتیجه برای داده های رکورد متد های ستر نداریم.
🔸 رکورد میتواند دارای چند کنستراکتور(سازنده) باشد:
🔸 برای رکورد میتوان یک کنستراکتور فشرده (compact constructor) ایجاد کرد. در واقع این نوع کنستراکتور ها هیچ ورودی نمیگیرند و هنگام ایجاد شدن صدا زده خواهند شد:
☕️ @PIECEJAVA
🔆 در جاوا یک روش ذخیره داده ها، استفاده از رکورد است. رکورد یک نوع خاص کلاس در جاوا است و عموما برای ذخیره داده های ساده کاربرد دارد. برای مثال ذخیره داده های فایل CSV.
🔅رکورد بر خلاف کلاس به نوشتن ستر و گتر احتیاج ندارد و یا به عبارتی دارای کد های بلند و غیر ضروری (بویلرپلت کد) نیست. در واقع زمانی که یک رکورد ایجاد میکنید، کمپایلر بصورت خودکار متد های گتر، هش کد و equals و همینطور toString را برای آن ایجاد میکند.
✒️ قواعد (Syntax)
برای ایجاد رکورد از کلیدواژه record استفاده میکنیم و مقابل کلیدواژه رکورد، اسم رکورد (Person) قرار میگیرد. بعد از نام گذاری، باید فیلد های مورد استفاده در رکورد و همینطور نوع آنها را مشخص کنیم:
public record Person(String name,به همین سادگی یک رکورد ایجاد کردیم که اطلاعات یک شخص اعم از نام، ایمیل و سن را در خود ذخیره میکند.
String email,
int age) {}
📝 نحوه استفاده
دقیقا مشابه کلاس ها، برای رکورد هم میتوانیم به راحتی با کلیدواژه new یک نمونه ایجاد کنیم.
Person first = new Person("Ali","[email protected]",42);
از آنجا که کمپایلر بصورت خودکار متد های گتر را برای رکورد قرار داده است، میتوانیم از این متد ها نیز به راحتی استفاده کنیم:public class Main {
public static void main(String[] args){
Person first = new Person("Ali","[email protected]",27);
System.out.println(first.name());
System.out.println(first.email());
System.out.println(first.age());
System.out.println(first);
}
}
OUTPUT:Ali
[email protected]
27
Person[name=Ali, [email protected], age=27]
🟡 نکاتی در رابطه با رکورد ها در جاوا
🔸 رکورد یک کلاس فاینال است. در نتیجه قابل ارث بری نیست.
🔸 داده های رکورد، ایممیوتبل (غیرقابل تغییر) اند. در نتیجه برای داده های رکورد متد های ستر نداریم.
🔸 رکورد میتواند دارای چند کنستراکتور(سازنده) باشد:
public record Person(String name, String email, int age) {
public Person(String name,int age){
this(name,null,age);
}
}
البته به این نکته توجه داشته باشید که برای کنستراکتور جدید، از دیفالت کنستراکتور استفاده کرده ایم. زیرا در غیر اینصورت خطای کمپایل در برخواهد داشت.🔸 برای رکورد میتوان یک کنستراکتور فشرده (compact constructor) ایجاد کرد. در واقع این نوع کنستراکتور ها هیچ ورودی نمیگیرند و هنگام ایجاد شدن صدا زده خواهند شد:
public record Person(String name,String email, int age) {
public Person{
System.out.println("Compact Constructor");
}
}
———☕️ @PIECEJAVA
👍9
تیکه پاره های جاوا
💎 کلاس های رکورد در جاوا 🔆 در جاوا یک روش ذخیره داده ها، استفاده از رکورد است. رکورد یک نوع خاص کلاس در جاوا است و عموما برای ذخیره داده های ساده کاربرد دارد. برای مثال ذخیره داده های فایل CSV. 🔅رکورد بر خلاف کلاس به نوشتن ستر و گتر احتیاج ندارد و یا به…
مثال هایی از کلاس record
☕️ @PIECEJAVA
☕️ @PIECEJAVA
👍9
💎 اینترفیس یا واسط چیست و چرا استفاده میکنیم؟
🔆 اینترفیس یا واسط در واقع یک نوع قرار داد میان کلاس ها خواهد بود. به این صورت که هر کلاسی که اینترفیس موردنظر را پیاده سازی کند، موظف است تمامی متد های آن را هم پیاده سازی کند.
☕️ @PIECEJAVA
🔆 اینترفیس یا واسط در واقع یک نوع قرار داد میان کلاس ها خواهد بود. به این صورت که هر کلاسی که اینترفیس موردنظر را پیاده سازی کند، موظف است تمامی متد های آن را هم پیاده سازی کند.
☕️ @PIECEJAVA
👍7
تیکه پاره های جاوا
💎 اینترفیس یا واسط چیست و چرا استفاده میکنیم؟ 🔆 اینترفیس یا واسط در واقع یک نوع قرار داد میان کلاس ها خواهد بود. به این صورت که هر کلاسی که اینترفیس موردنظر را پیاده سازی کند، موظف است تمامی متد های آن را هم پیاده سازی کند. ☕️ @PIECEJAVA
🔰 برای مثال فرض کنید قرار است انواع گوشی های هوشمند از کلاس موبایل ارث بری کنند که ویژگی های اولیه یک گوشی را پیاده سازی میکنند. مثلا لازم است که تمامی گوشی ها بخش گالری، دوربین و مرورگر و... داشته باشند. حالا هر کلاسی از مجموعه گوشی های هوشمند که واسط موبایل را پیاده سازی کند، موظف است متد های مربوط به موبایل را هم پیدا سازی کند. در نتیجه به کمک اینترفیس میتوان این اطمینان را حاصل کرد که تمامی کلاس های گوشی این ویژگی ها را پیاده سازی میکنند:
💡 از آنجا که متد های ابسترکت باید پیاده سازی شوند، در نتیجه لزومی به نوشتن سطح دسترسی متد ابسترکت نیست.
برای پیاده سازی اینترفیس بعد از اسم کلاس از کلیدواژه implements و سپس اسم اینترفیس مورد نظر استفاده میشود. برای مثال:
💬البته از بعد جاوای 8 متد های دیفالت و استاتیک هم به اینترفیس ها اضافه شده که انشالله در فرصتی دیگر حتما بررسی میشه :)
#interface
———
☕️ @PIECEJAVA
public interface Mobile {
void browser();
void camera();
void gallery();
}
💡 به متد هایی که فقط تعریف شوند و بدنه ای نداشته باشند (پیاده سازی نشده باشند) آبسترکت گفته میشود. یعنی فقط امضای متد method signature نوشته میشود. منظور از امضای متد، ساختار اولیه متد میباشد که نشان دهنده سطح دسترسی، نوع خروجی، اسم متد و ورودی های متد است. برای مثال:void browser();💡 اینترفیس حاوی متد های ابسترکت میباشد.
💡 از آنجا که متد های ابسترکت باید پیاده سازی شوند، در نتیجه لزومی به نوشتن سطح دسترسی متد ابسترکت نیست.
برای پیاده سازی اینترفیس بعد از اسم کلاس از کلیدواژه implements و سپس اسم اینترفیس مورد نظر استفاده میشود. برای مثال:
public class Note8Pro implements Mobile{
@Override
public void browser() { }
@Override
public void camera() { }
@Override
public void gallery() { }
}
حالا برای هر کلاس متد های browser , camera و gallery را پیاده سازی میکنیم. دقت داشته باشید که حذف هر کدام از متد های بالا، خطای کمپایلر را خواهد داشت. زیرا همانطور که گفتیم، کلاس ها موظفند این متد ها را پیاده سازی کنند.💬البته از بعد جاوای 8 متد های دیفالت و استاتیک هم به اینترفیس ها اضافه شده که انشالله در فرصتی دیگر حتما بررسی میشه :)
#interface
———
☕️ @PIECEJAVA
👍11