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

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
تیکه پاره های جاوا
خروجی کد بالا چیست؟
💬 پاسخ کامل:

احتمالا شما هم انتظار خروجی دیگری رو داشتید اما نتیجه ی اجرای برنامه ی بالا، خطای کمپایل خواهد بود.😊
در واقع سینتکس جاوا به شما اجازه ی تعریف و مقدار دهی یک متغیر محلی در یک ایف / فور / وایل/ دو وایل تک استیتمنتی(تک دستوری) رو نمیده و یک متغیر محلی زمانی بعنوان استیتمنت ظاهر میشه که داخل بلاک کد { } قرار گرفته باشه. پس اگه فور بالا بصورت زیر نوشته بودیم، برنامه خروجی 100 رو داشت:
for(int i = 0;i<100;i++){
Creature creature = new Creature();
}
و یا ازونجا که برناممون قرار نیست از متغیر creature استفاده کنه، میتونستیم بصورت زیر هم بنویسیم:
for(int i = 0;i<100;i++)
new Creature();


@PieceJava
👍102
💠 استفاده از _ برای جداسازی ارقام در کد

از بعد جاوای 7، برای جداسازی و افزایش خوانایی ارقام بزرگ در جاوا، میتوانید از _ استفاده کنید. مثلا فرض کنید برای ذخیره شماره کارت که باید 4 رقم 4 رقم برای خوانایی بهتر جداسازی شود. برای مثال:
long x = 1_2_13_213_131L;
long population = 8_078_598_555L;
double db = 1_2_3.4_5_6;
int x4 = 5_______2;

در اصل وجود _ هیچ تاثیری در خروجی کد نخواهد داشت و فقط جنبه ی خوانایی دارد.
البته به یاد داشته باشید که در حالت های زیر، قرار دادن _ خطای کمپایل به همراه خواهد داشت:
1. قرار دادن _ در پایان یا شروع داده:
int x = _1;

2. قرار دادن _ در مجاورت نقطه ی اعشار:
```java
double d1 = 12_.2;
double d2 = 13._4;

3. قبل یا بعد از حروف پسوندی F یا L که بترتیب برای مشخص کردن داده های اعشاری و لانگ به کار گرفته میشوند:
long socialSecurityNumber1  = 999_99_9999_L; 

4. در جاهایی که از رشته ای از ارقام استفاده میکنید. برای مثال کد زیر خطای رانتایم دارد:
int x = Integer.parseInt("23_34");

————
〽️ @PieceJava
🔥93
💠 نمونه ای از کاربرد های اینترفیس
🕘 زمان مطالعه: 2:00

🔆 در این مثال میخواهیم به کمک اینترفیس به بخشی از داده های یک کلاس داخلی دسترسی پیدا کنیم.

🔅 فرض کنید کلاس داخلی به نام Node را تعریف کرده اید:
public class LinkedList<E>{
private class Node<E>{
...
}
...
}

💬لیست پیوندی (LinkedList) ساختمان داده ایست که در آن داده ها در قالب یک Node ذخیره و از طریق آدرس گره بعدی خود به همدیگر لینک میشوند. در واقع هر Node حامل داده و آدرس گره بعدی خودش است.

در مثال بالا هیچ لزومی ندارد که کاربر به محتویات کلاس Node دسترسی پیدا کند. برای همین کلاس Node را پرایوت میکنیم.
اما از طرفی فرض کنید که میخواهیم به کاربر اجازه ی دسترسی به خود داده ی ذخیره شده را صادر کنیم. (یعنی فقط به داده و نه چیز دیگری از این کلاس).
در این حالت از اینترفیس استفاده میکنیم. مثلا اینترفیس زیر را ایجاد میکنیم:
public interface Position<E>{
E getElement();
}

حالا برای کلاس داخلی Node اینترفیس Position را پیاده سازی میکنیم و از طریق متد getElement اجازه ی دسترسی به داده را صادر میکنیم:
public class LinkedList<E>{
private class Node<E> implements Position<E>{
E data;
Node next;
...
...
@Override
public E getElement(){
return data;
}
...
...
}
private Node<E> head;
private Node<E> tail;
...
...
public Position<E> getFirst(){
return head;
}
...
}

در متد getFirst خروجی متد را از جنس Position<E> قرار داده ایم. این در واقع باعث میشود که کاربر به Node در قالب یک Position<E> دسترسی داشته باشد و همین باعث محدود شدن دسترسی اش به متد های اینترفیس Position خواهد شد. بنابراین از آنجا که Position فقط یک متد getElement را دارد، کاربر بجز به متد getElement، به هیچ داده ی دیگری از کلاس Node دسترسی نخواهد داشت.

👈 نکته ی 1: البته فکر میکنم شما به این موضوع واقف باشید که چه لزومی به پیاده سازی Position<E> داریم وقتی که میتوانیم بگوییم:
public E getFirst(){
return head.data;
}

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

👈 نکته ی 2: مثال بالا از کتاب ساختمان داده ی Michael. T goodrich هستش. میتوانید از همین کتاب، صفحه ی 271، فصل 7، مبحث Positional Lists، این مثال رو بیشتر و دقیق تر بررسی کنید. در واقع از Position<E> برای پیاده سازی یک حالت خاص از پیمایش داده های لینکدلیست به کار گرفته میشود

#interface
———
@PieceJava
👍11
Media is too big
VIEW IN TELEGRAM
#مثبت_برنامه_نویس
یه مقایسه ی خیلی باحال از مسیریابی A* و الگوریتم Dijkstra

همونطور که میبینید تو این مقایسه:
- دایکسترا سرعت کمتر داره اما تضمین میکنه که سریعترین راه ممکن رو پیدا میکنه
- الگوریتم A* خیلی خیلی سریعتره اما تضمینی در پیدا کردن کوتاه ترین راه نیست
@PieceJava
👍52🔥1
#معرفی_سایت
سایت QuickRef یه مرجع بسیار عالی برای cheatsheet ها. تو این سایت برای اکثر زبان ها، ابزار ها، نرم افزار ها، پایگاه داده ها، فریمورک ها، کتابخونه ها و... cheatsheet قرار داده شده.

https://quickref.me

@pieceJava
👍102
#Android
💠 نکته: استفاده از tools:listitem

فرض کنید برای هر آیتم در داخل لیستتون یا ریسایکلر ویو، یک لی اوت طراحی کردید. توی این مثال فرض میگیریم اسمش contacts_item.xml باشه
حالا برای داشتن یک پیش نمایش از آیتم هاتون در داخل ریسایکلر ویو، میتونید اتریبیوت زیر رو به ریسایکلر ویو اضافه کنید:
tools:listitem="@layout/contact_item"


@pieceJava
4👍3
5️⃣ جاوا به کاتلین (مفاهیم پایه)

تو این پست میخوایم یسری چیزای پایه ای رو با هم بررسی کنیم و یکسری معادل سازی هارو مابین کاتلین و جاوا انجام بدیم.

- خط 1: معادل متد main در جاوا و برای اجرای برنامه های کاتلین
- خط 2: تعریف متغیر Immutable نظیر کلیدواژه final در جاوا. این یعنی بعد از تعریف و مقدار دهی، نمیتوانید مقدار را عوض کنید
- خط 4: به main_loop @ لیبل گفته میشه. در واقع به کمک لیبل ها میتونید یک استیتمنت (مثل ایف، حلقه، when و...) را مارک کنید و در ادامه به کمک این مارک، یکسری کار هارو انجام بدید. برای مثال در خط 10 من از لیبل برای بریک کردن حلقه ی وایل استفاده کردم
- خط 7: بجز اسکنر، از طریق متد readLine هم میشه ورودی گرفت. منتها (توی این مثال) میباستی این ورودی رو به عدد تبدیل کرد(Integer.ValueOf).
- خط: 8: دستور when دقیقا مشابه switch هستش. یعنی مقادیر مختلف option رو بررسی میکنه.
- خط 11: معادل default در دستور switch اینجا از else استفاده میشه
#kotlin

4️⃣@PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥5👍1
💬 دارم داکیومنت کاتلین رو از صفر میخونم. هرچیز جالبی که بهش رسیدم رو اینجا باهاتون به اشتراک میزارم
اگرم شما هم در این زبان موضوع جالبی مدنظرتون قرار گرفت، توی کامنت ها به اشتراک بزارید که توی کانال با همه به اشتراک بزارم❤️ ^ ^
20
📁 آدرس نسبی و مطلق
زمان مطالعه: 1:00
🟡فرض کنید یک شاخه به نام Project و همینطور زیر شاخه های آن بصورت زیر داریم:
📂C:\USERS\AZIMIFARD\DESKTOP\DIRECTORIES

└───📂 src
└───📂 app
│ log.txt

├───📂 files
│ text1.txt

└───📂 run
│ Main.kt

حالا با توجه به مسیر بالا:
⬆️مسیر مطلق یا Absolute یعنی مسیر از ریشه یا همان درایو اصلی. برای مثال مسیر مطلق به فایل Main.kt بصورت زیر خواهد بود:
▶️ C:\Users\Azimifard\desktop\DIRECTORIES\src\app\run\Main.kt

⬆️مسیر نسبی یعنی مسیر نسبت به جایی که هستیم. برای مثال اینجا در فولدر PROJECT قرار داریم، پس مسیر نسبی برای فایل Main.kt از src بصورت زیر خواهد بود:
▶️src\app\run\Main.kt
در نظر داشته باشید که وجود / در اول مسیر نسبی باعث میشود مسیر بطور مطلق ظاهر شود. برای مثال اگر داشته باشیم:
▶️ \src\app\run\Main.kt
در اینصورت آدرس دیگر بصورت نسبی نیست و از ریشه در نظر گرفته میشود:
▶️ C:\src\app\run\Main.kt

————-
تیکه پاره های جاوا
4️⃣@PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103
5️⃣ کلاس ها در کاتلین (قسمت اول)
زمان مطالعه 4:00

🟡 مروری بر داکیومنت زبان کاتلین

🔗 آدرس داکیومنت اصلی
#kotlin
4️⃣ @PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
تیکه پاره های جاوا
5️⃣ کلاس ها در کاتلین (قسمت اول) زمان مطالعه 4:00 🟡 مروری بر داکیومنت زبان کاتلین 🔗 آدرس داکیومنت اصلی #kotlin 4️⃣ @PieceJava
⬆️ کلاس ها در کاتلین نیز با کلیدواژه class تعریف میشوند:
class Person {/**/}
⬆️ هر کلاس در کاتلین شامل دو جز میشود: هدر و بدنه که هر دو آپشنال هستند و میتوانید هنگام ایجاد کلاس آنها رو تعریف هم نکنید. مثلا:
class Empty
هنوزم یک کلاسه.

⬆️کلاس شامل یک سازنده (Constructor) اصلی و نیز میتواند دارای سازنده ثانویه و بیشتر هم باشد. سازنده ی اصلی در داخل هدر کلاس قرار میگیرد:
class Person constructor(firstName: String) { /*...*/ }

البته اگر سازنده ی کلاس دارای Annotation یا سطح دسترسی خاصی نباشد، میتوانید کلیدواژه ی constructor را بردارید:
class Person(firstName: String) { /*...*/ }

مثلا در دو حالت زیر ، نمیتوان کلیدواژه ی constructor را حذف کرد:
class Person private constructor(firstName:String)
class Customer public @Inject constructor(name: String) { /*...*/ }


⬆️کنستراکتور اصلی که در هدر کلاس قرار گرفته، فقط فیلد های کلاس را مقدار دهی میکند. این به این معنیست که نمیتوان هیچ کد قابل اجرایی را در آن گذاشت. درنتیجه برای اجرای دستورات هنگام ساخته شدن آبجکت میتوانید از initializer blocks یا بلاک مقدار دهی استفاده کنید:
class InitOrderDemo(name: String) {
val firstProperty = "First property: $name".also(::println)

init {
println("First initializer block that prints $name")
}

val secondProperty = "Second property: ${name.length}".also(::println)

init {
println("Second initializer block that prints ${name.length}")
}
}

⬆️میتوانید از پارامتر هایی که در کنستراکتور اصلی استفاده کرده اید نیز در بلاک مقداردهی هم استفاده کنید و نه تنها انجا بلکه میتوانید برای مقدار دهی دیگر فیلد های کلاسیتان هم از آنها استفاده کنید:
class Customer(name: String) {
val customerKey = name.uppercase()
}



⬆️کاتلین برای ایجاد و مقدار دهی همزمان مقادیر داخل کنستراکتور نیز سینکتس مختصری را در نظر گرفته. فرض کنید کنستراکتور زیر را دارید:
class Person(val firstName: String, val lastName: String, var age: Int)

میتوانید برای مقدار دهی اولیه پرامتر های ورودی کنستراکتور بصورت زیر عمل کنید:
class Person(val firstName: String, val lastName: String, var isEmployed: Boolean = true)

اℹ️ پیشنهاد میشود برای خوانایی بیشتر هدر کلاس بصورت زیر فیلد ها یا پارامتر هارا در هر خط نوشته و در آخر هر خط با کاما جدا کنید:
class Person(
val firstName: String,
val lastName: String,
var age: Int, // trailing comma
) { /*...*/ }

⬆️مانند فیلد ها، میتوانید فیلد های تعریف شده در کنستراکتور را Mutable (با کلیدواژه var) و یا فقط قابل خواندن (با کلیدواژه val) تعریف کنید.

⬆️همانطور که پیش تر گفتیم کلاس میتواند شامل کنستراکتور ثانویه باشد. کنستراکتور ثانویه در داخل بدنه کلاس و با کلیدواژه ی cosntrcutorتعریف میشود:
class Person(val pets: MutableList<Pet> = mutableListOf())

class Pet {
constructor(owner: Person) {
owner.pets.add(this) // adds this pet to the list of its owner's pets
}
}

تیکه پاره های جاوا
———————-
4️⃣@PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
5️⃣ کلاس ها در کاتلین (قسمت دوم)
زمان مطالعه 1:00

🟡 مروری بر داکیومنت زبان کاتلین

🔗 آدرس داکیومنت اصلی

4️⃣ @PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
تیکه پاره های جاوا
5️⃣ کلاس ها در کاتلین (قسمت دوم) زمان مطالعه 1:00 🟡 مروری بر داکیومنت زبان کاتلین 🔗 آدرس داکیومنت اصلی 4️⃣ @PieceJava
⬆️اگر کلاسی دارای کنستراکتور اصلی باشد، کنستراکتور های ثانویه باید اشاره ای به کنستراکتور اصلی داشته باشند (delegate). این اشاره میتواند بصورت مستقیم صورت گیرد و یا بصورت غیر مستقیم از طریق کنستراکتور های ثانویه دیگر انجام شود. اشاره به کنستراکتور دیگر (delegate) از طریق کلیدواژه ی this انجام میشود:

class Person(val name: String) {
val children: MutableList<Person> = mutableListOf()
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}


⬆️بلاک مقدار دهی (init) بخشی از کنستراکتور اصلی است. در نتیجه هر زمان که کنستراکتور اصلی اشاره شود، بلاک های init نیز اجرا خواهند شد.
حتی اگر کلاس شما دارای کنستراکتور اصلی نباشد، باز هم برای کنستراکتور های ثانویه، اشاره به کنستراکتور اصلی به طور ضمنی اتفاق می افتد (یعنی نیازی نیست جلوی کنستراکتور دوم از this استفاده بشه):
class Constructors {
init {
println("Init block")
}

constructor(i: Int) {
println("Constructor $i")
}
}

خروجی:
Init block
Constructor 1


⬆️اگر یک کلاس ساده (غیر ابسترکت) دارای هیچ کنستراکتوری نباشد، در این صورت یک کنستراکتور اصلی بدون هیچگونه ورودی برای کلاس در نظر گرفته میشود. سطح دسترسی کنستراکتور پابلیک خواهد بود.

درصورتی که بخواید کلاس دارای هیچگونه کنستراکتور پابلیکی نباشد، میتوانید سطح دسترسی آن را به پرایوت تغییر دهید:
class DontCreateMe private constructor() { /*...*/ }


برای ساختن یک نمونه (شی / Object/ Instance) از یک کلاس، فقط کافیست کنستراکتور آن را صدا بزنید:

val invoice = Invoice()
val customer = Customer("Joe Smith")

اℹ️ (در کاتلین بر خلاف جاوا، نیازی به استفاده از کلیدواژه new برای ساختن ابجکت نیست).
-----------------------------
📁 اعضای کلاس ها در کاتلین
🟡 کنستراکتور ها و بلاک های init
🟡 توابع
🟡 خصوصیات (properties)
🟡 کلاس های تو در تو یا داخلی
🟡 تعریف آبجکت (Object Decelaration)

—————
#kotlin
تیکه پاره های جاوا
4️⃣@PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
📁 برخی از کلمات و اصطلاحات پر کاربرد در منابع زبان اصلی

📁 تفاوت کلمه صریح (explicit) و ضمنی (implicit) در برنامه نویسی
یک چیز ضمنی یعنی چیزی که توسط ماشین مجازی یا یک ابزار در برنامه صورت میگیره و نیازی به تعریف مستقیم از طرف برنامه نویس نیست.
مثال ⬆️ در جاوا برای تبدیل نوع داده از جنس int به long، داریم:
int x = 10;
long y = x;

در اینجا بطور ضمنی تبدیل صورت گرفته یعنی بدون آنکه نیاز باشد حرفی از تبدیل نوع بزنیم.
مثال 2⬆️ برای داشتن یک کنستراکتور پیشفرض نیازی نیست بطور مستقیم آن را در کلاس تعریف کنیم، بلکه اینکار توسط ماشین مجازی صورت میگیرد.

اما یک چیز صریح، یعنی برنامه نویس باید آشکارا در برنامه چیزی را تعریف کند. دقیقا برعکس مثال قبلی اگر قرار بر تبدیل یک داده از جنس long به int باشد، در برنامه حتما باید تبدیل نوع نیز بطور واضح و آشکار نوشته شود:
long y = 23131L;
x = (int) y;


📁 تفاوت کلمه exclusive و inclusive:
هر دوی کلمات معمولا برای یک بازه ای از اعداد به کار گرفته میشود و اغلب اوقات برای آخرین عدد بازه توصیف میشود..

مثال ⬆️ بازه ی زیر را در نظر بگیرید:
[1,10)
در این حالت بازه ی ما exclusive میباشد. یعنی شامل اخرین عدد نمیشود.
[1,10]
در این حالت بازه ی ما inclusive میباشد. یعنی شامل آخرین عدد میشود.

مثال 2 ⬆️ در جاوا متد subString به دو شکل تعریف شده:
1. subString(int startIndex)
2. subString(int startIndex,int endIndex)

برای حالت دوم میگوییم endIndex بطور exclusive در نظر گرفته شده است. در نتیجه برای تکه کد زیر
String str = "HelloWorld";
System.out.println(str.substring(3,6));
خروجی رشته ای low خواهیم داشت (کاراکتر با اندیس 6 شامل این بازه نمیشود).

💬 شما با چه کلماتی زیاد برخورد داشتید؟😁
————
تیکه پاره های جاوا
4️⃣ @PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍31
📁 رجکس مربوط به شماره تلفن های ایرانی

💡 انواع رجکس های مربوط به شماره تلفن های ایرانی تو حالت های مختلف رو جناب امیرمهدی جبرئیلی زحمتشو کشیدن تو گیت هابشون قرار دادند.
برای استفاده به ادرس زیر مراجعه کنید:

صحت سنجی شماره تلفن های ایرانی با رجکس

#regex

🟨 @pieceJS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27
درود و عرض ادب دوستان
بنابر هدف کانال، ازین به بعد فقط ”تیکه پاره“ هایی از جاوا رو مستقیم بصورت پست میکنم. اگر موردِ طولانی هم باشد، در قالب تلگراف یا ویدیو کوتاه براتون قرار میدم. مخصوصا ”تلگراف“ که به نسبت پست عادی هزار بار خوانا تر هست 😇

ممنونم از بابت همراهیتون ❤️
موفق و پیروز باشین
~ محمدرضا
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍1
#کوییز
دوستان دو تا سوال میزارم، بکمک stream حلش کنین و توی بخش کامنت ها جوابش رو بزارید 🙂 نکته جالبی داره که در ادامه قرار میدم


⬆️بکمک استریم، لیستی از تمام حروف منحصر بفرد برای یک لیست رشته ای را بازگشت دهید. برای مثال:
input: [ "Hello" , "World" ]
output: [ "H", "e", "l", "o", "W", "r", "d" ]


⬆️ با داشتن دو لیست از اعداد، چطور میتوان تمامی جفت اعداد این دو لیست رو بکمک استریم بدست آورد؟
input: [1 ,2 ,3] , [3 ,4]
ouput: [(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]
Please open Telegram to view this post
VIEW IN TELEGRAM
6