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

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
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
#معرفی_سایت
احتمالا تا الان متوجه شدید که بعضی از مقالات سایت medium پریمیوم هستند و تا زمانی که اشتراک پریمیوم رو تهیه نکنید، به شما اجازه ی خوندن نمیده.
البته مشکلی نیست، فقط کافیه لینک مقاله رو در داخل سایت readmedium.com وارد کنید😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥31
gistfile1.txt
26.4 KB
#پیشنهاد
فایل JSON حاوی اطلاعات تمامی استان ها و شهر های ایران که بشدت توی پروژه ها بخصوص برای ثبت اطلاعات کاربر نیاز میشه

منبع: Saman Zamani Github
👍11🔥3
مدیفایر (Modifier) ها در اینترفیس
زمان مطالعه: 1:00


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

⬅️ ویژگی های اینترفیس:
1. تمام متد ها بطور پیش فرض abstract هستند.
2. تمام فیلد ها بطور پیش فرض public static final هستند.
3. اینترفیس میتواند دارای توابع default و static باشد(این ویژگی از جاوا 8 به بعد اضافه شده).

بصورت سینتکسی و ساده، بصورت زیر تعریف میشه:
public interface Printable{
int VALUE = 10;
void print(String msg);
default void defaultMethod(...) {....}
static void staticMethod(...) {....}
}


اما جالبه بدونید که سینتکس کاملش بصورت زیره:
public abstract interface Printable{
public static final int VALUE = 10;
public abstract void print(String msg);
public default void defaultMethod(...) {....}
public static void staticMethod(...) {....}
}


⬅️منتها از جهت ساده تر شدن سینتکس، خود جاوا بطور ضمنی modifier هارو اضافه میکنه. برای همین شما هر کدوم از کلیدواژه های public, final و abstract رو اگه نزارید، جاوا خودش بصورت خودکار براتون اضافه میکنه :)

✒️ محمدرضا عظیمی فرد
———
#interface
4️⃣ @PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥1
چرا توابع آبسترکت نمیتوانند پرایوت، فاینال یا استاتیک باشند؟
زمان مطالعه: 1:00


متد abstract بدنه ای ندارد و حتما باید در کلاس فرزند Override شود.

🔗 در مورد Overriding از اینجا بخوانید

⬅️ وقتی شما متدی رو final تعریف میکنید، به این معناست که تابع اجازه ی Override شدن را ندارد که این با مفهوم abstract در تضاد است.

🔗در رابطه با کلیدواژه final از اینجا بخوانید

⬅️ در خصوص پرایوت نیز به همین صورت است. متد پرایوت یعنی فقط در سطح خود کلاس قابل دسترسی است و نمیتوان آن را Override کرد که این باز هم با مفهوم abstract در تناقض است.

🔗 در مورد سطوح دسترسی از اینجا بخوانید

⬅️ در رابطه با استاتیک، وقتی متدی رو استاتیک تعریف میکنید، یعنی متد متعلق به کلاس است نه آبجکت! به عبارتی با ClassName.method() صدا زده میشود و هیچ ارتباطی به شی ساخته شده ندارد. در صورتی که متد abstract باید توسط کلاس فرزند پیاده سازی شده و طریق پلی مورفیسم روی آبجکت صدا زده شود. در ضمن متدی که استاتیک باشد را نمیتوان اورراید کند.

🔗 در رابطه با استاتیک از اینجا بخوانید

✒️ محمدرضا عظیمی فرد
———
#abstract
4️⃣ @PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#پیشنهاد
برنامه Everything یک موتور جستجوی سریع (خیییلی سریع) برای ویندوز هستش.

پ.ن: اینقد سریع همه چی رو پیدا میکنه که آدم دیگه تنبل میشه و فایلاشو دسته بندی نمیکنه. پس لطفا حواستون باشه که مثل من نشید 😃

⬇️ از اینجا دانلود کنید
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
#مثبت_برنامه_نویس

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

برای سامسونگ:
Settings → Device care → Maintenance Mode

برای شیائومی و IPhone هم اگه شما مسیر فعالسازیش رو میدونید بگید تا به پست اضافه کنم :)

پ.ن: ضمن اینکه این حالت رو فعال کنید، بهتره قبل از تعمیر یه بکاپ از داده هاتون بگیرید.

———
4️⃣ @PieceJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7