تیکه پاره های جاوا
527 subscribers
93 photos
24 videos
7 files
58 links
سلام خوش اومدید. اینجا یادداشت ها و تکه های جاوا رو کنار هم قرار میدیم :) مطالب کاملا اختصاصی و دستنویس هستند. کپی فقط با ذکر منبع و آیدی کانال❤️

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
#پیشنهاد
بنظرم همین الان برید و Microsoft PowerToys رو نصب کنید. واقعا جای ابزار هاش توی ویندوز خالیه... معرکست! لیست قسمتی از ابزار هاش رو توی عکس بعدی گذاشتم حتما ببینید👌

ازینجا دانلود کنین:
https://github.com/microsoft/PowerToys

از مایکروسافت استور هم میتونید دانلودش کنید
7👍1
🟡 متد رفرنس ها در جاوا Method Refrences
🕓زمان مطالعه:
3:30 دقیقه

پیش از مطالعه این بخش، بخش های زیر را مطالعه کنید:
- فانکشنال اینترفیس و عبارات لامبدا
- استریم ها در جاوا

در جاوای 8، متد رفرنس ها در واقع حالت کوتاه شده ی برخی از عبارات لامبدا برای صدا زدن یک متد هستند و به گونه ای ارجاع به متد را راحت تر و باعث افزایش خوانایی کد میشوند.

🔅نحوه ارجاع متد به یک متد استاتیک:
ClassName::MethodName
بعنوان مثال:
Integer::parseInt یا Math::max

🔅نحوه ارجاع به یک متد غیر استاتیک:
ReferenceVariable::MethodName
مثلا اگر نمونه ی ما s نام داشته باشد، داریم:
s::getName

🔅نحوه ارجاع به کنستراکتور یک کلاس
ClassName::new
برای مثال:
Function<String, Sample> createSample = Sample::new;

بعنوان مثال
🔰مثال:
list.forEach(e->System.out.println(e));
برای پیاده سازی این عبارت لامبدا به کمک متد رفرنس داریم:
list.forEach(System.out::println);

🔰 مثال 2:
BiFunction<Integer,Integer,Integer> findMax = (a,b)-> Math.max(a,b);
برای پیاده سازی این تابع داریم:
BiFunction<Integer,Integer,Integer> findMax =Math::max;

🔰 مثال 3:
ArrayList<Integer> a = new ArrayList<>();
a.add(1);
a.add(20);
a.add(-1);
a.add(4);
Comparator<Integer> comparator = (o1, o2) -> o1-o2;
a.stream()
.sorted(comparator::compare)
.forEach(System.out::println);

در این مثال اینترفیس Comparator را پیاده سازی کرده ایم که داده ها را بصورت صعودی مرتب میکند. حالا از طریق استریم متد compare از comparator را به sorted ارجاع داده ایم و همینطور اینکار را برای متد println نیز انجام داده ایم. پس نتیجه ی خروجی استریم، مرتب سازی داده و چاپ هر کدام از داده های لیست میباشد.
🔰 مثال 4:
public class Main {
public static void main(String[] args) {
Function<String, Sample> createSample = Sample::new;
Sample m = createSample.apply("Mohammad");
System.out.println(m.name());
}
}
record Sample(String name){}

در این نمونه یک تابع ساخته ایم که ورودی آن String و خروجی ان یک نمونه از رکورد Sample میباشد. در این مثال:
Sample::new
معادل
(s)-> new Sample(s)
میباشد.
————
#method #method_reference #lambda #stream
☕️@PieceJava
👍5
#کتاب
دوستان اگه دقت کرده باشید دو نسخه از کتاب های دایتل وجود داره تحت عنوان Early Objects و Late Objects

نسخه Early Objects نسخه ای هست که شی گرایی را از چپتر 3 شروع کرده اما نسخه Late Objects از چپتر 7 به بعد این کار رو کرده و خود ناشر اینطور میگه که Late Objects رو در واقع برای دوره هایی منتشر کردن که مدرس نمیخواد فعلا وارد شی گرایی بشه و قراره اول مبانی رو خوب یاد بده. ضمنا هر دو نسخه از فصل 8 به بعد تقریبا شبیه به هم میشن.

توصیه میشه که اگه خودآموز دارید پیش میرید، از نسخه Early Objects استفاده کنید ;)

☕️@PieceJava
👍5
#پیشنهاد
💠 کدوم ترجمه ی کتاب دایتل رو بگیریم؟

رفقا توی بازار چند ترجمه از کتاب دایتل وجود داره اما از نظر من بهترین ترجمه متعلق به مهندس علیرضا زارع پور هستش
بیاید توی پست بعدی با هم یک مقایسه ای کنیم.
#کتاب #دایتل
@PieceJava
2👍1
تیکه پاره های جاوا
#پیشنهاد 💠 کدوم ترجمه ی کتاب دایتل رو بگیریم؟ رفقا توی بازار چند ترجمه از کتاب دایتل وجود داره اما از نظر من بهترین ترجمه متعلق به مهندس علیرضا زارع پور هستش بیاید توی پست بعدی با هم یک مقایسه ای کنیم. #کتاب #دایتل @PieceJava
💠 کدوم ترجمه ی کتاب دایتل رو بگیریم؟

🔻 متن کتاب:
An array is a group of variables (called elements or components) containing values that all have the same type. Arrays are objects, so they’re considered reference types. As you’ll soon see, what we typically think of as an array is actually a reference to an array object in memory. The elements of an array can be either primitive types or reference types (including arrays, as we’ll see in Section 7.11). To refer to a particular element in an array, we specify the name of the reference to the array and the position number of the element in the array. The position number of the element is called the element’s index or subscript.

🟡 نمونه یکی از ترجمه های مشهور بازار
یک آرایه گروهی از مکان های حافظه ی پشت سرهم هم نوع میباشند. برای اشاره به یک مکان مشخص یا عنصری در یک آرایه، نام آرایه و سپس شماره مکان یا موقعیت عنصر مورد نظر آورده میشود. در شکل 7-1 یک نمایش منطقی از یک آرایه از نوع صحیح بنام c نشان داده شده است و...

💬 جمله آخر از عنوان بعدی کتاب به این پاراگراف متصل شده. یعنی:
Figure 7.1 shows a logical representation of an integer array called c.

🟡 ترجمه علیرضا زارع پور (ویرایست یازدهم چاپ 1400):
آرایه به گروهی از متغیر ها (یا مکان های پیوسته در حافظه) گفته میشود که همگی از یک نوع داده ی یکسان هستند. آرایه یک شی است، بنابراین جزء انواع مرجع محسوب می شود. عناصر یک آرایه میتوانند از هر یکی از انواع پایه یا انواع مرجع (از جمله آرایه های دیگر) باشند. به هر یک از این مکان های حافظه عنصر (element) یا مولفه (component) میگوییم، و برای اشاره به یک عنصر یا مولفه ی خاص از نام آرایه و شماره ی مکان آن در آرایه - که به آن اندیس (index) یا زیرنویس (subscript) آن عنصر نیز گفته میشود - استفاده میکنیم.


🟢 رنگ و کیفیت:
چاپ دو رنگ آبی و مشکی

🟢 بخش گرافیک:
همونطور که میدونید بعضی از نسخه های قدیمی دایتل در بازار، کتابی رو ترجمه کردن که از Swing برای گرافیک استفاده کرده
اما ترجمه ی فعلی از علیرضا زارع پور، از ویرایش 11 کتاب دایتل همراه با آموزش JavaFx بجای Swing هستش

@PieceJava
👍3🔥1
#معرفی_وبسایت

💠 وبسایت GoalKicker
یه جای باحال که چند نفر اومدن و بر اساس داکیومنت های سایت stackoverflow کلی نوت و یادداشت رو برای 48 زبان جمع آوری کردن و همه رو بصورت رایگان گذاشتن. عالیه!
یه سر بهش بزنید و کیف کنید. مخصوصا اینکه هر چیزی رو با یه مثال توضیح داده :))

🔗 | آدرس سایت |
———
تیکه پاره های جاوا:
🟡 @PieceJava
10👍3
This media is not supported in your browser
VIEW IN TELEGRAM
دیباگر #Intellij_IDEA یه قابلیت خفن داره که باهاش میتونید استریم هارو دیباگ کنید. خفن تر از اون اینه که میتونید بصورت بصری ببینید هر لحظه توی دستورات استریم چه اتفاقایی داره میوفته :)

از طریق محیط دیباگر برنامه رو اجرا کنید> روی منو سمت راست کلیک کنید > دکمه Trace Current Stream chain رو انتخاب کنید

💬 در اولین فرصت حتما آموزش کار با دیباگر رو اینجا قرار میدم
@PieceJava
👍135
This media is not supported in your browser
VIEW IN TELEGRAM
#مثبت_برنامه_نویس
انیمیشن Resilience
داستان درباره اینه که طبیعت چطور بعد از یک جنگ و ویرانی، دوباره خودش رو بازیابی میکنه :)
پیام های دیگه ای هم البته میشه دریافت کرد.

جالبه حتما ببینین

@pieceJava
👍7
تیکه پاره های جاوا pinned «⭕️ لینک های دسترسی سریع: (از طریق هشتگ ها هم میتونید کلیدواژه هارو داخل کانال جستجو کنید) 💎 چرا در یک فایل جاوا ( .java ) فقط یک کلاس public میتونیم داشته باشیم؟ 💎 چرا پردازش یک آرایه مرتب بسیار سریع تر از پردازش یک آرایه نامرتب است؟ 💎 چرا متد های آرایه در…»
This media is not supported in your browser
VIEW IN TELEGRAM
#مثبت_برنامه_نویس
مرتب سازی آرایه با روش Quick sort بصورت گرافیکی

💬 عالی بود :))
#dsa

🟡 @pieceJava
6👍2
🔆 معکوس کردن یک رشته


1️⃣
از طریق متد reverse از کلاس StringBuilder
String str = "PieceJava";
String reversed = new StringBuilder(str).reverse();


2️⃣ بکمک حلقه:
String input = "PieceJava";
String reversed="";
for (int i = input.length()-1; i>=0 ;i--) {
reversed+= input.charAt(i);
}
return reversed;


3️⃣ بصورت بازگشتی:
public String reverse(String input){
if(input.length()<=1) return input;
char firstChar = input.charAt(0);
String sub = input.substring(1);
return reverse(sub)+firstChar;
}


#exercise
========
☕️ @PieceJava
👍7😁1
#معرفی_سایت
#مثبت_برنامه_نویس
| MonkeyType |
همونطور که میدونید یکی از فاکتور های مهم در کدنویسی، سرعت تایپتونه :)

اگه دنبال یه سایت خوب برای افزایش و تست سرعت هستین، پیشنهادم سایت monkeyType هستش.
برای تست سرعت خیلی کامله (به انواع حالت ها میتونید تست بگیرید)

پ.ن: تقریبا همه ی زبان ها از جمله زبان فارسی رو هم ساپورت میکنه :)

@PieceJava
4👍1
تیکه پاره های جاوا
#کوییز
خروجی کد بالا کدوم میشه؟
Anonymous Quiz
43%
ece
14%
iece
35%
ecej
9%
iecej
👍9
🔆 تفاوت سرعت و کارایی میان الحاق کردن رشته با + و append از کلاس StringBuilder

↖️ همانطور که میدانید String یک نوع غیر قابل تغییر (Immutable) است اما از طریق StringBuilder میتوانید یک نوع تغییر پذیر از رشته ها ایجاد کنید.

این نکته را هم در ذهن داشته باشید که برای یک رشته فرضا به نام str مادامی که یک رشته را به آن الحاق میکنید، یک آبجکت جدید در String pool ایجاد شده و آدرس آن در str ذخیره میشود. مثلا برای کد زیر
String str = "Hello";
str +=" World";
در خط اول یک رشته "Hello" در String pool ایجاد میشود و در خط بعدی نیز رشته ی جدید "Hello World" در String pool مجددا ایجاد میشود. در نتیجه هر الحاق یک رشته ی جدید را در String pool ایجاد میکند ( مگر اینکه رشته ی الحاقی قبلا در String pool ایجاد شده باشد که در اینصورت jvm آدرس به آن رشته را باز میگرداند و دیگر رشته ی جدیدی ساخته نمیشود. البته این مورد رو بعدا در پست جداگانه و بطور تخصصی تر هم بررسی میکنیم).

اما در حقیقت، الحاق کردن رشته از طریق + یا StringBuilder.append() هر دو به یک صورت انجام میشود و هر دو هنگام کمپایل شدن یک نوع بایت کد را تولید میکنند. این یعنی اگر داشته باشیم:
str = str1 + str2 + str3
این قطعه کد دقیقا معادل تکه کد زیر خواهد بود:

str = new StringBuilder().sb.append(str1).append(str2).append(str3).toString();

به اینصورت که انگار با الحاق کردن چند رشته با +، به نحوی یک نمونه از StringBuilder ایجاد کرده ایم و همه ی رشته ها را با متد append به هم الحاق کرده ایم.

اما مسئله زمانی تفاوت پیدا میکند که بخواهیم در یک حلقه با تعداد تکرار بالا، الحاق را انجام دهیم. برای مثال تکه کد زیر را در نظر بگیرید:
long start = System.currentTimeMillis();
String str = "";
for(int i = 0;i<100000;i++){
str+="*";
}
long finish = System.currentTimeMillis();
System.out.println(finish-start+"ms");

اجرای این تکه کد برای الحاق 100000 کاراکتر شاید به اندازه ی 11000ms (یازده ثانیه) زمان ببرد تا بطور کامل اجرا شود (زمان اجرای این تکه کد روی هر ماشین متفاوت است و ممکن است برای شما کمتر یا بیشتر طول بکشد).

اما اگر از طریق StringBuilder این کار را انجام دهیم:

long start = System.currentTimeMillis();
StringBuilder str = new StringBuilder();
for(int i = 0;i<100000;i++){
str.append("*");
}
long finish = System.currentTimeMillis();
System.out.println(finish-start+"ms");
خواهید دید که زمان اجرا کاهش شدیدی پیدا میکند (مثلا 10 میلی ثانیه).
👈 در واقع در قطعه کد اول، بخاطر خاصیت Immutable بودن رشته ها، هر بار رشته ی جدیدی در String pool ایجاد میشود و آدرس آن به str داده میشود که این میتواند هزینه ی اضافی را تحمیل کند. اما در قطعه کد دوم، فقط یک آبجکت از StringBuilder ایجاد میشود و هر بار کاراکتری به دنباله کاراکتر های قبلی اضافه میشود(در واقع در این کلاس آرایه ای از جنس کاراکتر ها وجود دارد) و تا زمانی که toString را برای این کلاس صدا نزنید، کل کاراکتر ها در همین حالت و بصورت یک دنباله در این ارایه میمانند.

شاید بگویید پیشتر به این موضوع اشاره کردیم که + و append به یک صورت عمل میکنند اما به خاطر داشته باشید که با هر بار + یک نمونه از StringBuilder در heap ایجاد میشود. یعنی برای 100000 تکرار ما 100000 آبجکت ایجاد کرده ایم!

📌نتیجه گیری:
- اگر دستورات کوتاه برای الحاق چند رشته دارید، مستقیم از + استفاده کنید و حالشو ببرید😁
- اگر لازم است که الحاق در چندین مرحله صورت گیرد، پیشنهاد میشود که از StringBuilder استفاده کنید
#String #StringBuilder #concat
————
@PieceJava
👍74