💠 استفاده از _ برای جداسازی ارقام در کد
از بعد جاوای 7، برای جداسازی و افزایش خوانایی ارقام بزرگ در جاوا، میتوانید از _ استفاده کنید. مثلا فرض کنید برای ذخیره شماره کارت که باید 4 رقم 4 رقم برای خوانایی بهتر جداسازی شود. برای مثال:
در اصل وجود _ هیچ تاثیری در خروجی کد نخواهد داشت و فقط جنبه ی خوانایی دارد.
البته به یاد داشته باشید که در حالت های زیر، قرار دادن _ خطای کمپایل به همراه خواهد داشت:
1. قرار دادن _ در پایان یا شروع داده:
2. قرار دادن _ در مجاورت نقطه ی اعشار:
3. قبل یا بعد از حروف پسوندی F یا L که بترتیب برای مشخص کردن داده های اعشاری و لانگ به کار گرفته میشوند:
4. در جاهایی که از رشته ای از ارقام استفاده میکنید. برای مثال کد زیر خطای رانتایم دارد:
————
〽️ @PieceJava
از بعد جاوای 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
🔥9❤3
💠 نمونه ای از کاربرد های اینترفیس
🕘 زمان مطالعه: 2:00
🔆 در این مثال میخواهیم به کمک اینترفیس به بخشی از داده های یک کلاس داخلی دسترسی پیدا کنیم.
🔅 فرض کنید کلاس داخلی به نام Node را تعریف کرده اید:
💬لیست پیوندی (LinkedList) ساختمان داده ایست که در آن داده ها در قالب یک Node ذخیره و از طریق آدرس گره بعدی خود به همدیگر لینک میشوند. در واقع هر Node حامل داده و آدرس گره بعدی خودش است.
در مثال بالا هیچ لزومی ندارد که کاربر به محتویات کلاس Node دسترسی پیدا کند. برای همین کلاس Node را پرایوت میکنیم.
اما از طرفی فرض کنید که میخواهیم به کاربر اجازه ی دسترسی به خود داده ی ذخیره شده را صادر کنیم. (یعنی فقط به داده و نه چیز دیگری از این کلاس).
در این حالت از اینترفیس استفاده میکنیم. مثلا اینترفیس زیر را ایجاد میکنیم:
حالا برای کلاس داخلی Node اینترفیس Position را پیاده سازی میکنیم و از طریق متد getElement اجازه ی دسترسی به داده را صادر میکنیم:
در متد getFirst خروجی متد را از جنس Position<E> قرار داده ایم. این در واقع باعث میشود که کاربر به Node در قالب یک Position<E> دسترسی داشته باشد و همین باعث محدود شدن دسترسی اش به متد های اینترفیس Position خواهد شد. بنابراین از آنجا که Position فقط یک متد getElement را دارد، کاربر بجز به متد getElement، به هیچ داده ی دیگری از کلاس Node دسترسی نخواهد داشت.
👈 نکته ی 1: البته فکر میکنم شما به این موضوع واقف باشید که چه لزومی به پیاده سازی Position<E> داریم وقتی که میتوانیم بگوییم:
در حقیقت هدف محدود سازی دسترسی به کلاس داخلی بود و هر کجا که نیاز باشد به بخشی از کلاس داخلی اجازه ی دسترسی صادر کنید، میتوانید از اینترفیس استفاده کنید.
مثلا سناریویی را در نظر بگیرید که یک کلاس داخلی چندین نوع داده را نگهداری میکند. حالا میتوان با پیاده سازی اینترفیس ها در کلاس داخلی مشخص کرد که از طریق کلاس خارجی، به چه بخشی از داده های کلاس میتوان دسترسی پیدا کرد.
👈 نکته ی 2: مثال بالا از کتاب ساختمان داده ی Michael. T goodrich هستش. میتوانید از همین کتاب، صفحه ی 271، فصل 7، مبحث Positional Lists، این مثال رو بیشتر و دقیق تر بررسی کنید. در واقع از Position<E> برای پیاده سازی یک حالت خاص از پیمایش داده های لینکدلیست به کار گرفته میشود
#interface
———
@PieceJava
🕘 زمان مطالعه: 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
یه مقایسه ی خیلی باحال از مسیریابی A* و الگوریتم Dijkstra
همونطور که میبینید تو این مقایسه:
- دایکسترا سرعت کمتر داره اما تضمین میکنه که سریعترین راه ممکن رو پیدا میکنه
- الگوریتم A* خیلی خیلی سریعتره اما تضمینی در پیدا کردن کوتاه ترین راه نیست
@PieceJava
👍5❤2🔥1
#معرفی_سایت
سایت QuickRef یه مرجع بسیار عالی برای cheatsheet ها. تو این سایت برای اکثر زبان ها، ابزار ها، نرم افزار ها، پایگاه داده ها، فریمورک ها، کتابخونه ها و... cheatsheet قرار داده شده.
https://quickref.me
@pieceJava
سایت QuickRef یه مرجع بسیار عالی برای cheatsheet ها. تو این سایت برای اکثر زبان ها، ابزار ها، نرم افزار ها، پایگاه داده ها، فریمورک ها، کتابخونه ها و... cheatsheet قرار داده شده.
https://quickref.me
@pieceJava
👍10❤2
#Android
💠 نکته: استفاده از tools:listitem
فرض کنید برای هر آیتم در داخل لیستتون یا ریسایکلر ویو، یک لی اوت طراحی کردید. توی این مثال فرض میگیریم اسمش contacts_item.xml باشه
حالا برای داشتن یک پیش نمایش از آیتم هاتون در داخل ریسایکلر ویو، میتونید اتریبیوت زیر رو به ریسایکلر ویو اضافه کنید:
@pieceJava
💠 نکته: استفاده از tools:listitem
فرض کنید برای هر آیتم در داخل لیستتون یا ریسایکلر ویو، یک لی اوت طراحی کردید. توی این مثال فرض میگیریم اسمش contacts_item.xml باشه
حالا برای داشتن یک پیش نمایش از آیتم هاتون در داخل ریسایکلر ویو، میتونید اتریبیوت زیر رو به ریسایکلر ویو اضافه کنید:
tools:listitem="@layout/contact_item"
@pieceJava
❤4👍3
تو این پست میخوایم یسری چیزای پایه ای رو با هم بررسی کنیم و یکسری معادل سازی هارو مابین کاتلین و جاوا انجام بدیم.
- خط 1: معادل متد main در جاوا و برای اجرای برنامه های کاتلین
- خط 2: تعریف متغیر Immutable نظیر کلیدواژه final در جاوا. این یعنی بعد از تعریف و مقدار دهی، نمیتوانید مقدار را عوض کنید
- خط 4: به main_loop @ لیبل گفته میشه. در واقع به کمک لیبل ها میتونید یک استیتمنت (مثل ایف، حلقه، when و...) را مارک کنید و در ادامه به کمک این مارک، یکسری کار هارو انجام بدید. برای مثال در خط 10 من از لیبل برای بریک کردن حلقه ی وایل استفاده کردم
- خط 7: بجز اسکنر، از طریق متد readLine هم میشه ورودی گرفت. منتها (توی این مثال) میباستی این ورودی رو به عدد تبدیل کرد(Integer.ValueOf).
- خط: 8: دستور when دقیقا مشابه switch هستش. یعنی مقادیر مختلف option رو بررسی میکنه.
- خط 11: معادل default در دستور switch اینجا از else استفاده میشه
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥5👍1
💬 دارم داکیومنت کاتلین رو از صفر میخونم. هرچیز جالبی که بهش رسیدم رو اینجا باهاتون به اشتراک میزارم
اگرم شما هم در این زبان موضوع جالبی مدنظرتون قرار گرفت، توی کامنت ها به اشتراک بزارید که توی کانال با همه به اشتراک بزارم❤️ ^ ^
اگرم شما هم در این زبان موضوع جالبی مدنظرتون قرار گرفت، توی کامنت ها به اشتراک بزارید که توی کانال با همه به اشتراک بزارم❤️ ^ ^
❤20
│
└───
└───
│ log.txt
│
├───
│ text1.txt
│
└───
│ Main.kt
حالا با توجه به مسیر بالا:
در اینصورت آدرس دیگر بصورت نسبی نیست و از ریشه در نظر گرفته میشود:
————-
تیکه پاره های جاوا
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
تیکه پاره های جاوا
class Person {/**/}
class Empty
هنوزم یک کلاسه.
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) { /*...*/ }
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
) { /*...*/ }
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
}
}
تیکه پاره های جاوا
———————-
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
تیکه پاره های جاوا
class Person(val name: String) {
val children: MutableList<Person> = mutableListOf()
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}حتی اگر کلاس شما دارای کنستراکتور اصلی نباشد، باز هم برای کنستراکتور های ثانویه، اشاره به کنستراکتور اصلی به طور ضمنی اتفاق می افتد (یعنی نیازی نیست جلوی کنستراکتور دوم از 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")
ا
-----------------------------
—————
#kotlin
تیکه پاره های جاوا
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
یک چیز ضمنی یعنی چیزی که توسط ماشین مجازی یا یک ابزار در برنامه صورت میگیره و نیازی به تعریف مستقیم از طرف برنامه نویس نیست.
مثال
int x = 10;
long y = x;
در اینجا بطور ضمنی تبدیل صورت گرفته یعنی بدون آنکه نیاز باشد حرفی از تبدیل نوع بزنیم.
مثال 2
اما یک چیز صریح، یعنی برنامه نویس باید آشکارا در برنامه چیزی را تعریف کند. دقیقا برعکس مثال قبلی اگر قرار بر تبدیل یک داده از جنس long به int باشد، در برنامه حتما باید تبدیل نوع نیز بطور واضح و آشکار نوشته شود:
long y = 23131L;
x = (int) y;
هر دوی کلمات معمولا برای یک بازه ای از اعداد به کار گرفته میشود و اغلب اوقات برای آخرین عدد بازه توصیف میشود..
مثال
[1,10)
در این حالت بازه ی ما exclusive میباشد. یعنی شامل اخرین عدد نمیشود.
[1,10]
در این حالت بازه ی ما inclusive میباشد. یعنی شامل آخرین عدد میشود.
مثال 2
1. subString(int startIndex)
2. subString(int startIndex,int endIndex)
برای حالت دوم میگوییم endIndex بطور exclusive در نظر گرفته شده است. در نتیجه برای تکه کد زیر
String str = "HelloWorld";
System.out.println(str.substring(3,6));
خروجی رشته ای low خواهیم داشت (کاراکتر با اندیس 6 شامل این بازه نمیشود).
————
تیکه پاره های جاوا
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3❤1
Forwarded from تیکه پاره های جاوا اسکریپت
💡 انواع رجکس های مربوط به شماره تلفن های ایرانی تو حالت های مختلف رو جناب امیرمهدی جبرئیلی زحمتشو کشیدن تو گیت هابشون قرار دادند.
برای استفاده به ادرس زیر مراجعه کنید:
صحت سنجی شماره تلفن های ایرانی با رجکس
#regex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27
درود و عرض ادب دوستان
بنابر هدف کانال، ازین به بعد فقط ”تیکه پاره“ هایی از جاوا رو مستقیم بصورت پست میکنم. اگر موردِ طولانی هم باشد، در قالب تلگراف یا ویدیو کوتاه براتون قرار میدم. مخصوصا ”تلگراف“ که به نسبت پست عادی هزار بار خوانا تر هست😇
ممنونم از بابت همراهیتون❤️
موفق و پیروز باشین
~ محمدرضا
بنابر هدف کانال، ازین به بعد فقط ”تیکه پاره“ هایی از جاوا رو مستقیم بصورت پست میکنم. اگر موردِ طولانی هم باشد، در قالب تلگراف یا ویدیو کوتاه براتون قرار میدم. مخصوصا ”تلگراف“ که به نسبت پست عادی هزار بار خوانا تر هست
ممنونم از بابت همراهیتون
موفق و پیروز باشین
~ محمدرضا
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍1
Telegraph
کلاس Timer و TimerTask در جاوا
سلام ودرود D: کلاس Timer در واقع به شما اجازه ی اجرای وظایف در یک زمان مشخص شده را میدهد. میتوان وظایف را طوری تنظیم کنید که یکبار اجرا بشود و یا اینکه در فاصله های منظم و بصورت دوره ای اجرا شود. البته ناگفته نماند که میتوانید تایمر را هر زمان که خواستید،…
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2❤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
تیکه پاره های جاوا
Telegraph
متد flatmap درStream - جاوا
سوال 1: بکمک استریم، لیستی از تمام حروف منحصر بفرد برای یک لیست رشته ای را بازگشت دهید. برای مثال: • input: [ "Hello" , "World" ] • output: [ "H", "e", "l", "o", "W", "r", "d" ] پاسخ: شاید در ابتدای کار تصور کنید که کار ساده ایست و راه چاره این است که هر…
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2
#معرفی_سایت
احتمالا تا الان متوجه شدید که بعضی از مقالات سایت medium پریمیوم هستند و تا زمانی که اشتراک پریمیوم رو تهیه نکنید، به شما اجازه ی خوندن نمیده.
البته مشکلی نیست، فقط کافیه لینک مقاله رو در داخل سایت readmedium.com وارد کنید😉
احتمالا تا الان متوجه شدید که بعضی از مقالات سایت medium پریمیوم هستند و تا زمانی که اشتراک پریمیوم رو تهیه نکنید، به شما اجازه ی خوندن نمیده.
البته مشکلی نیست، فقط کافیه لینک مقاله رو در داخل سایت readmedium.com وارد کنید
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3❤1
gistfile1.txt
26.4 KB
#پیشنهاد
فایل JSON حاوی اطلاعات تمامی استان ها و شهر های ایران که بشدت توی پروژه ها بخصوص برای ثبت اطلاعات کاربر نیاز میشه
منبع: Saman Zamani Github
فایل JSON حاوی اطلاعات تمامی استان ها و شهر های ایران که بشدت توی پروژه ها بخصوص برای ثبت اطلاعات کاربر نیاز میشه
منبع: Saman Zamani Github
👍11🔥3