تیکه پاره های جاوا
💠 تفاوت runtime error و compile time error و logical error
⚠️ خطای رانتایم
خطای رانتایم در زمان اجرا رویت میشود. برای مثال:
- زمانی که کاربر از طریق اسکنر یک داده نامعتبر را وارد کند (فرضا بجای عدد رشته رو وارد کنه).
- تبدیل رشته حاوی کاراکتر به عدد: Integer.parsInt("a1")
- زمانی که حافظه استک سر ریز شود
- تقسیم 1 بر 0
💡این نوع خطا اکثر اوقات بر اساس ورودی های نامعتبر رخ میدهد.
⚠️ خطای کمپایل
خطای کمپایل مربوط به خطا هاییست که پیش از اجرا شدن برنامه رخ میدهد و معمولا خود IDE قبل از اجرای برنامه به شما اخطار میدهد. برای مثال:
- ذخیره یک داده اشتباه در مکان اشتباه:
int name = "Mohammad Reza";
- جا انداختن سمیکالن ;
- جا انداختن آکولاد باز یا بسته یا هر دو {}
- استفاده از کلاسی که هنوز تعریف نشده است
- استفاده از متغیری که هنوز ایجاد نشده است.
- استفاده از متغیری که هنوز مقدار دهی نشده است:
int sum;
System.out.println(sum);
رفع این خطاها عموما بدون هیچ پیچیدگیست. زیرا به کمک کمپایلر جای خطا به شما نشان داده میشود.
⚠️خطای منطقی
یکی از سخت ترین نوع خطا ها خطای منطقیست. در واقع برنامه بدون هیچ مشکلی اجرا و کار میکند اما نتیجه اشتباه را برمیگرداند. در این حالت میگوییم خطای منطقی رخ داده است. برای مثال:
برنامه ای بنویسید که دو عدد 2 و 5 را با هم جمع کند و نمایش دهد:
حالا اگر بین 2 و 5 بجای + از هر عملگر دیگری استفاده کنید، از آنجا که نتیجه اشتباه خواهد بود میگوییم خطای منطقی رخ داده است.
#runtime_error #compile_error
#errors #error #runtime #compile
#logical_error
—————
تیکه پاره های جاوا
@PieceJava
خطای رانتایم در زمان اجرا رویت میشود. برای مثال:
- زمانی که کاربر از طریق اسکنر یک داده نامعتبر را وارد کند (فرضا بجای عدد رشته رو وارد کنه).
- تبدیل رشته حاوی کاراکتر به عدد: Integer.parsInt("a1")
- زمانی که حافظه استک سر ریز شود
- تقسیم 1 بر 0
💡این نوع خطا اکثر اوقات بر اساس ورودی های نامعتبر رخ میدهد.
⚠️ خطای کمپایل
خطای کمپایل مربوط به خطا هاییست که پیش از اجرا شدن برنامه رخ میدهد و معمولا خود IDE قبل از اجرای برنامه به شما اخطار میدهد. برای مثال:
- ذخیره یک داده اشتباه در مکان اشتباه:
int name = "Mohammad Reza";
- جا انداختن سمیکالن ;
- جا انداختن آکولاد باز یا بسته یا هر دو {}
- استفاده از کلاسی که هنوز تعریف نشده است
- استفاده از متغیری که هنوز ایجاد نشده است.
- استفاده از متغیری که هنوز مقدار دهی نشده است:
int sum;
System.out.println(sum);
رفع این خطاها عموما بدون هیچ پیچیدگیست. زیرا به کمک کمپایلر جای خطا به شما نشان داده میشود.
⚠️خطای منطقی
یکی از سخت ترین نوع خطا ها خطای منطقیست. در واقع برنامه بدون هیچ مشکلی اجرا و کار میکند اما نتیجه اشتباه را برمیگرداند. در این حالت میگوییم خطای منطقی رخ داده است. برای مثال:
برنامه ای بنویسید که دو عدد 2 و 5 را با هم جمع کند و نمایش دهد:
حالا اگر بین 2 و 5 بجای + از هر عملگر دیگری استفاده کنید، از آنجا که نتیجه اشتباه خواهد بود میگوییم خطای منطقی رخ داده است.
#runtime_error #compile_error
#errors #error #runtime #compile
#logical_error
—————
تیکه پاره های جاوا
@PieceJava
❤6
#پیشنهاد
💠 پروژه چی بنویسم؟
🔆 اگه دوست دارید پروژه بزنید ولی ایده ای براش ندارید، لینک زیر رو دنبال کنید.
✅ در واقع یه ریپازیتوری که کلی پیشنهاد برای ساختن پروژه مطرح کرده. پروژه ها توی موضوعات مختلفی از جمله اعداد، الگوریتم نویسی، کار با رشته ها، شبکه، کلاس ها، نخ ها، فایل ها، دیتابیس و... دسته بندی شده اند.
✅ ضمنا ناگفته نمونه که سورس پروژه ها از طریق آدرس زیر قابل دسترسیه. تقریبا به اکثر زبان ها موجود هستن:
🔗 پروژه ها
🔗 سورس پروژه ها
@PieceJava
💠 پروژه چی بنویسم؟
🔆 اگه دوست دارید پروژه بزنید ولی ایده ای براش ندارید، لینک زیر رو دنبال کنید.
✅ در واقع یه ریپازیتوری که کلی پیشنهاد برای ساختن پروژه مطرح کرده. پروژه ها توی موضوعات مختلفی از جمله اعداد، الگوریتم نویسی، کار با رشته ها، شبکه، کلاس ها، نخ ها، فایل ها، دیتابیس و... دسته بندی شده اند.
✅ ضمنا ناگفته نمونه که سورس پروژه ها از طریق آدرس زیر قابل دسترسیه. تقریبا به اکثر زبان ها موجود هستن:
🔗 پروژه ها
🔗 سورس پروژه ها
@PieceJava
GitHub
GitHub - karan/Projects: :page_with_curl: A list of practical projects that anyone can solve in any programming language.
:page_with_curl: A list of practical projects that anyone can solve in any programming language. - karan/Projects
👍6❤4😁1
💠 کلیدواژه var در جاوا
🔆 از بعد جاوای 10 میتوان بجای نوشتن مستقیم نوع داده ها، از کلیدواژه var استفاده کرد.
در نتیجه در خط کد زیر، میتوانید نوع داده یعنی String را
⁉️ آیا var در جاوا مشابه var در جاوا اسکریپت است؟
جاوا یک زبان statically typed است. یعنی نوع داده ها از همان ابتدا که مشخص میشود، تا آخر برنامه ثابت میماند. در نتیجه var در جاوا کاملا متفاوت از var در جاوا اسکریپت میباشد. در جاوا اسکریپت هر زمان که بخواهید میتوانید نوع داده را تغییر دهید. اما همینکار در جاوا خطای کمپایل خواهد داشت:
1️⃣
⚠️ در حالت های زیر نمیتوانید از var استفاده کنید. در صورت استفاده خطای کمپایل خواهید داشت:
❌ هر کجا که نوع داده برای کمپایلر مبهم باشد:
——————-
تیکه پاره های جاوا
@PieceJava
🔆 از بعد جاوای 10 میتوان بجای نوشتن مستقیم نوع داده ها، از کلیدواژه var استفاده کرد.
در نتیجه در خط کد زیر، میتوانید نوع داده یعنی String را
String name = "Mohammad Reza";با کلید واژه var جایگزین کنید:
var name = "Mohammad Reza";در این حالت خود کمپایلر نوع داده را تشخیص میدهد.
⁉️ آیا var در جاوا مشابه var در جاوا اسکریپت است؟
جاوا یک زبان statically typed است. یعنی نوع داده ها از همان ابتدا که مشخص میشود، تا آخر برنامه ثابت میماند. در نتیجه var در جاوا کاملا متفاوت از var در جاوا اسکریپت میباشد. در جاوا اسکریپت هر زمان که بخواهید میتوانید نوع داده را تغییر دهید. اما همینکار در جاوا خطای کمپایل خواهد داشت:
var text = "Hello World";چند مثال استفاده از var:
text = 23; // Incompatible types
1️⃣
Person person = new Person();2️⃣
var person = new Person();
ArrayList<Integer> numbers = new ArrayList<>();3️⃣
var numbers = new ArrayList<Integer>();
int[] x = {1,2,3,4,5};
int[] y = new int[10];
var x = new int[]{1,2,3,4,5};
var y = new int[10];
🟡 متغیر از نوع var میتواند فاینال تعریف شود تا از مقداردهی دوباره آن جلوگیری شود:final var text = "Hello World"(بر خلاف کاتلین که val برای مقادیر ثابت بود، اینجا چیزی به نام val نداریم و باید از فاینال استفاده کنیم)
⚠️ در حالت های زیر نمیتوانید از var استفاده کنید. در صورت استفاده خطای کمپایل خواهید داشت:
❌ هر کجا که نوع داده برای کمپایلر مبهم باشد:
var a;❌ متغیر از نوع var بعنوان یک متغیر گلوبال به کار برود.
var nothing = null;
var lambda = () -> System.out.println("Pity!");
var method = this::someMethod;
class Person{
var name;
var adress;
var age;
}
❌ کلیدواژه var تعیین کننده خروجی متد یا نوع ورودی متد باشد. var myMethod(){
}
void myMethod(var x){
}
#var #keywords——————-
تیکه پاره های جاوا
@PieceJava
👍12❤2
💠 الگوی طراحی سینگلتون
#الگوی_طراحی
🧩 دیزاین پترن ها یا الگو های طراحی یکسری روش ها و تکنیک ها برای حل یک مسئله خاص هستند. در این قسمت میخواهیم با الگوی سینگلتون برای طراحی کلاس سینگلتون آشنا بشیم
🔆 کلاس سینگلتون به کلاسی گفته میشود که از آن فقط یک نمونه میتوان ایجاد کرد. یعنی هر نمونه ای که از این کلاس تولید کنید، همگی به یک خانه از حافظه اشاره میکنند.
☕️ @PieceJava
#الگوی_طراحی
🧩 دیزاین پترن ها یا الگو های طراحی یکسری روش ها و تکنیک ها برای حل یک مسئله خاص هستند. در این قسمت میخواهیم با الگوی سینگلتون برای طراحی کلاس سینگلتون آشنا بشیم
🔆 کلاس سینگلتون به کلاسی گفته میشود که از آن فقط یک نمونه میتوان ایجاد کرد. یعنی هر نمونه ای که از این کلاس تولید کنید، همگی به یک خانه از حافظه اشاره میکنند.
☕️ @PieceJava
👍10
▫️ دو نکته کلیدی در هنگام ساخت کلاس سینگلتون باید رعایت شود:
- سطح دسترسی تمامی کنستراکتور های کلاستان را باید پرایوت تعریف کنید تا از این کلاس هیچ نمونه ای قابل ایجاد شدن نباشد.
- در کلاستان یک نمونه استاتیک از همین کلاس تعریف کنید. به گونه ای که دسترسی به این نمونه از طریق یک متد استاتیک صورت گیرد.
برای مثال:
class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return instance;
}
}
حالا یک کلاس سینگلتون ساده ایجاد کرده ایم. پس اگر ما از الگوی سینگلتون در کلاس خود استفاده کرده باشیم کد زیر باید خروجی معادل true داشته باشد: (ترو به معنای برابر بودن هر دو نمونه ایجاد شده یا اشاره هر دو نمونه به یک خانه از حافظه دارد)
public class Main {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2); //prints true
}
}
❓ کاربرد کلاس سینگلتون
در حالت کلی اگر بخواهید از کلاستان فقط یک نمونه در کل برنامه وجود داشته باشد میتوانید از این الگو استفاده کنید. برای مثال برای جابجایی داده ها در میان کلاس ها و یا برای اتصال برنامه به دیتابیس میتوانیم از این الگو استفاده کنیم. برای مثال:
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Database db1;
// refers to the only object of Database
db1= Database.getInstance();
db1.getConnection();
}
}
class Database {
private static Database dbObject;
private Database() {
}
public static Database getInstance() {
// create object if it's not already created
if(dbObject == null) {
dbObject = new Database();
}
// returns the singleton object
return dbObject;
}
public void getConnection() {
System.out.println("You are now connected to the database.");
}
}
پس با توجه به الگوی سینگلتون، در برنامه بالا کافیست فقط یکبار متد getInstance صدا زده شود تا برنامه به دیتابیس متصل شود.
💬 مثال اول اگه دقت کرده باشید، instance رو بیرون از متد getInstance مقدار دهی کردیم درصورتی که تو مثال بعدی، اینکار رو درصورت نال بودن dbObject در متد getInstance انجام دادیم. به اینکار Lazy Loading گفته میشه. یعنی نمونه تنها در زمانی ساخته میشه که لازم باشه که همین میتونه باعث صرفه جویی در مصرف منابع بشه.
#design_patterns #singleton #gof
————
☕️ @PIECEJAVA
- سطح دسترسی تمامی کنستراکتور های کلاستان را باید پرایوت تعریف کنید تا از این کلاس هیچ نمونه ای قابل ایجاد شدن نباشد.
- در کلاستان یک نمونه استاتیک از همین کلاس تعریف کنید. به گونه ای که دسترسی به این نمونه از طریق یک متد استاتیک صورت گیرد.
برای مثال:
class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return instance;
}
}
حالا یک کلاس سینگلتون ساده ایجاد کرده ایم. پس اگر ما از الگوی سینگلتون در کلاس خود استفاده کرده باشیم کد زیر باید خروجی معادل true داشته باشد: (ترو به معنای برابر بودن هر دو نمونه ایجاد شده یا اشاره هر دو نمونه به یک خانه از حافظه دارد)
public class Main {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2); //prints true
}
}
❓ کاربرد کلاس سینگلتون
در حالت کلی اگر بخواهید از کلاستان فقط یک نمونه در کل برنامه وجود داشته باشد میتوانید از این الگو استفاده کنید. برای مثال برای جابجایی داده ها در میان کلاس ها و یا برای اتصال برنامه به دیتابیس میتوانیم از این الگو استفاده کنیم. برای مثال:
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Database db1;
// refers to the only object of Database
db1= Database.getInstance();
db1.getConnection();
}
}
class Database {
private static Database dbObject;
private Database() {
}
public static Database getInstance() {
// create object if it's not already created
if(dbObject == null) {
dbObject = new Database();
}
// returns the singleton object
return dbObject;
}
public void getConnection() {
System.out.println("You are now connected to the database.");
}
}
پس با توجه به الگوی سینگلتون، در برنامه بالا کافیست فقط یکبار متد getInstance صدا زده شود تا برنامه به دیتابیس متصل شود.
💬 مثال اول اگه دقت کرده باشید، instance رو بیرون از متد getInstance مقدار دهی کردیم درصورتی که تو مثال بعدی، اینکار رو درصورت نال بودن dbObject در متد getInstance انجام دادیم. به اینکار Lazy Loading گفته میشه. یعنی نمونه تنها در زمانی ساخته میشه که لازم باشه که همین میتونه باعث صرفه جویی در مصرف منابع بشه.
#design_patterns #singleton #gof
————
☕️ @PIECEJAVA
👍10
💎 یک متد با چند خروجی همزمان در جاوا
🔴 سوال: آیا متد میتونه همزمان چند مقدار رو ریترن کنه؟
🟢 جواب: هم آره و هم نه!
🔆 در واقع بصورت عادی یک متد فقط میتونه یک چیز رو ریترن کنه. پس نمیشه انتظار چند خروجی همزمان رو داشت
اما میشه داده رو یجورایی در قالب یه بسته خروجی داد که البته در زیر انواع روش ها رو برای این کار توضیح میدم:
🔅 استفاده از آرایه:
متدتون میتونه خروجی با استفاده از آرایه داشته باشه. مثلا فرض کنید یه متد دارین که مختصات پیش فرض رو برمیگردونه:
double[] defaultCoordinate(){
double[] co = new double[2];
co[0] = 2.0;
co[1] = 4.6;
return co;
}
🔅 استفاده از کلاس Pair:
کلاس Pair کلاسیه که فقط دو مقدار میتونه نگهداری کنه و ضمنا مقادیری که درش ذخیره میشه دیگه قابل تغییر نیست و فقط قابل دسترسیه. یعنی نمونه های این کلاس Immutable 🔗 هستن:
Pair<String,Double> studentInfo = new Pair<>("MohammadReza",14.5);
در نتیجه میشه خروجی یک متد رو یک نمونه از کلاس Pair گذاشت:
Pair stInfo(String name,double grade){
Pair<String,Double> studentInfo = new Pair<>(name,grade);
return studentInfo;
}
🔅 استفاده از کلاس های کتابخانه Tuple:
اگه بیشتر از 2 داده برای خروجی داشته باشید، میتونید از کلاس های کتابخونه Tuple استفاده کنید(کارکردشون دقیقا مشابه کلاس Pair اما برای ذخیره بیشتر از 2 داده):
For 1 element - Unit<A>
For 2 elements - Pair<A, B>
For 3 elements - Triplet<A, B, C>
For 4 elements - Quartet<A, B, C, D>
For 5 elements - Quintet<A, B, C, D, E>
For 6 elements - Sextet<A, B, C, D, E, F>
For 7 elements - Septet<A, B, C, D, E, F, G>
For 8 elements - Octet<A, B, C, D, E, F, G, H>
For 9 elements - Ennead<A, B, C, D, E, F, G, H, I>
For 10 elements - Decade<A, B, C, D, E, F, G, H, I, J>
🔅 کلاس خودتون رو تعریف کنید:
میتونید کلاس خودتون رو تعریف کنید و به تعدادی که میخواید براش فیلد تعریف کنید. در نهایت وقتی میخواید متدتون خروجی داشته باشه، نوع خروجی متدتون رو نمونه ای از کلاس تعریف شده قرار میدین. مثلا:
class Coordinate{
int x,y,z;
coordinate(int x,int y, int z){
this.x = x;
this.y = y;
this.z = z;
}
}
و حالا متدی که تعریف میکنیم:
Coordinate position(int x,int y, int z){
return new Coordinate(x,y,z);
}
که در واقع سه داده ورودی رو در قالب یک داده (از کلاس Coordinate) خروجی میده.
حرف آخر اینکه علاوه بر روش هایی که بالا تعریف کردیم، بازم میشه جور دیگه خروجی رو داد. مثلا میتونید از List یا Map هم استفاده کنید :)
———
#methods #return #tuple #pair
تیکه پاره های جاوا
@PieceJava
🔴 سوال: آیا متد میتونه همزمان چند مقدار رو ریترن کنه؟
🟢 جواب: هم آره و هم نه!
🔆 در واقع بصورت عادی یک متد فقط میتونه یک چیز رو ریترن کنه. پس نمیشه انتظار چند خروجی همزمان رو داشت
اما میشه داده رو یجورایی در قالب یه بسته خروجی داد که البته در زیر انواع روش ها رو برای این کار توضیح میدم:
🔅 استفاده از آرایه:
متدتون میتونه خروجی با استفاده از آرایه داشته باشه. مثلا فرض کنید یه متد دارین که مختصات پیش فرض رو برمیگردونه:
double[] defaultCoordinate(){
double[] co = new double[2];
co[0] = 2.0;
co[1] = 4.6;
return co;
}
🔅 استفاده از کلاس Pair:
کلاس Pair کلاسیه که فقط دو مقدار میتونه نگهداری کنه و ضمنا مقادیری که درش ذخیره میشه دیگه قابل تغییر نیست و فقط قابل دسترسیه. یعنی نمونه های این کلاس Immutable 🔗 هستن:
Pair<String,Double> studentInfo = new Pair<>("MohammadReza",14.5);
در نتیجه میشه خروجی یک متد رو یک نمونه از کلاس Pair گذاشت:
Pair stInfo(String name,double grade){
Pair<String,Double> studentInfo = new Pair<>(name,grade);
return studentInfo;
}
🔅 استفاده از کلاس های کتابخانه Tuple:
اگه بیشتر از 2 داده برای خروجی داشته باشید، میتونید از کلاس های کتابخونه Tuple استفاده کنید(کارکردشون دقیقا مشابه کلاس Pair اما برای ذخیره بیشتر از 2 داده):
For 1 element - Unit<A>
For 2 elements - Pair<A, B>
For 3 elements - Triplet<A, B, C>
For 4 elements - Quartet<A, B, C, D>
For 5 elements - Quintet<A, B, C, D, E>
For 6 elements - Sextet<A, B, C, D, E, F>
For 7 elements - Septet<A, B, C, D, E, F, G>
For 8 elements - Octet<A, B, C, D, E, F, G, H>
For 9 elements - Ennead<A, B, C, D, E, F, G, H, I>
For 10 elements - Decade<A, B, C, D, E, F, G, H, I, J>
🔅 کلاس خودتون رو تعریف کنید:
میتونید کلاس خودتون رو تعریف کنید و به تعدادی که میخواید براش فیلد تعریف کنید. در نهایت وقتی میخواید متدتون خروجی داشته باشه، نوع خروجی متدتون رو نمونه ای از کلاس تعریف شده قرار میدین. مثلا:
class Coordinate{
int x,y,z;
coordinate(int x,int y, int z){
this.x = x;
this.y = y;
this.z = z;
}
}
و حالا متدی که تعریف میکنیم:
Coordinate position(int x,int y, int z){
return new Coordinate(x,y,z);
}
که در واقع سه داده ورودی رو در قالب یک داده (از کلاس Coordinate) خروجی میده.
حرف آخر اینکه علاوه بر روش هایی که بالا تعریف کردیم، بازم میشه جور دیگه خروجی رو داد. مثلا میتونید از List یا Map هم استفاده کنید :)
———
#methods #return #tuple #pair
تیکه پاره های جاوا
@PieceJava
Telegram
تیکه پاره های جاوا
💎معنی Mutable و Immutable بودن کلاس ها (قابل تغییر و غیر قابل تغییر بودن)
🔅به آبجکت هایی که بعد از ایجاد شدن قابل تغییر هستند، Mutable گفته میشود. برای مثال کلاس Date یا StringBuilder
🔅در مقابل به ابجکت هایی که پس از ایجاد شدن قابل تغییر نیستند، Immutable…
🔅به آبجکت هایی که بعد از ایجاد شدن قابل تغییر هستند، Mutable گفته میشود. برای مثال کلاس Date یا StringBuilder
🔅در مقابل به ابجکت هایی که پس از ایجاد شدن قابل تغییر نیستند، Immutable…
👍10
تیکه پاره های جاوا
💎 یک متد با چند خروجی همزمان در جاوا 🔴 سوال: آیا متد میتونه همزمان چند مقدار رو ریترن کنه؟ 🟢 جواب: هم آره و هم نه! 🔆 در واقع بصورت عادی یک متد فقط میتونه یک چیز رو ریترن کنه. پس نمیشه انتظار چند خروجی همزمان رو داشت اما میشه داده رو یجورایی در قالب یه…
مثال های مربوط به متد با چند خروجی همزمان
@PieceJava
@PieceJava
👍10
Forwarded from تیکه پاره های جاوا اسکریپت
💎 معرفی وبسایت پرکاربرد openbase
وبسایت openbase.com یکی از پرکاربرد ترین مراجع آنلاین تو انتخاب پکیج مناسب برای انجام فعالیتی خاص محسوب میشه.
⁉️ فرض کنید قصد دارید یک پکیج برای راه اندازی Date Picker نصب کنید و از طرفی، میخواید بدونید که محبوب ترین پکیج برای این کار چیه؟!
🔆 برای همین وارد این وبسایت میشید، از قسمت سرچ اسم Date Picker رو مینویسید، سمت راست فیلد سرچ، زبان مورد نظرتون رو انتخاب و سرچ رو انجام میدید. این وبسایت 10 تا از محبوب ترین پکیج ها رو از نظر تعداد نصب و بازخورد کاربران رو براتون نمایش میده و به سادگی میتونید بهترین پکیج رو برای هر کاری پیدا کنید.
💬 زبان های پشتیبانی شده : Javascript, Swift, Python, Java, Go, Rust
#مثبت_برنامه_نویس #معرفی_وبسایت
🌐 @pieceJS
وبسایت openbase.com یکی از پرکاربرد ترین مراجع آنلاین تو انتخاب پکیج مناسب برای انجام فعالیتی خاص محسوب میشه.
⁉️ فرض کنید قصد دارید یک پکیج برای راه اندازی Date Picker نصب کنید و از طرفی، میخواید بدونید که محبوب ترین پکیج برای این کار چیه؟!
🔆 برای همین وارد این وبسایت میشید، از قسمت سرچ اسم Date Picker رو مینویسید، سمت راست فیلد سرچ، زبان مورد نظرتون رو انتخاب و سرچ رو انجام میدید. این وبسایت 10 تا از محبوب ترین پکیج ها رو از نظر تعداد نصب و بازخورد کاربران رو براتون نمایش میده و به سادگی میتونید بهترین پکیج رو برای هر کاری پیدا کنید.
💬 زبان های پشتیبانی شده : Javascript, Swift, Python, Java, Go, Rust
#مثبت_برنامه_نویس #معرفی_وبسایت
🌐 @pieceJS
❤10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
#مثبت_برنامه_نویس
🌀 به بهانه روز جهانی فیبوناچی
پیشنهاد میکنم این سه دقیقه رو کامل و با دقت ببینید و کیف کنید :)
💬 توی تمرینات مبانی هم خیلی پر کاربرد بود... 😁
@PieceJava
🌀 به بهانه روز جهانی فیبوناچی
پیشنهاد میکنم این سه دقیقه رو کامل و با دقت ببینید و کیف کنید :)
💬 توی تمرینات مبانی هم خیلی پر کاربرد بود... 😁
@PieceJava
👍13
تیکه پاره های جاوا
🟡 فانکشنال اینترفیس و عبارت لامبدا 🕦زمان مطالعه: 2 دقیقه #lambda #FunctionalInterface 〽️ @PieceJava
💠 فانکشنال اینترفیس و بررسی عبارات لامبدا
🔆 فانکشنال اینترفیس در واقع به اینترفیسی گفته میشود که تنها یک متد ابسترکت را داشته باشد (Single Abstract Method) هر چند که همچنان میتواند دارای متد های استاتیک و دیفالت باشد. برای نشانه گذاری اینترفیس فانکشنال، از انوتیشن @FunctionalInterface استفاده میشود. در واقع نشانه گذاری اینترفیس بعنوان فانکشنال، از نوشتن متد های ابسترکت اضافه جلوگیری میکند (اگه متد ابسترکت جدید اضافه کنین، کمپایلر بهتون یادآوری میکنه)
🔅 یکی از دلایل اهمیت فانکشنال اینترفیس، به برنامه نویس امکان استفاده از عبارات لامبدا را میدهد بدون اینکه نیاز باشد کلاسی را بصورت بی نام (Anonymous) و فقط جهت استفاده از اینترفیس تعریف کند.
نمونه ای از تعریف کلاس Anonymous در متد مین با پیاده سازی اینترفیس فانکشنال IPrinter:
public class Main {
public static void main(String[] args) {
IPrinter printer = new IPrinter() {
@Override
public void print(String str) {
System.out.println(str);
}
};
printer.print("Hello World");
}
}
@FunctionalInterface
interface IPrinter{
void print(String str);
}
⁉️ عبارت لامبدا چیست؟
عبارت لامبدا صرفا متدی است بدون اسم و نشان که از سه بخش تشکیل شده است. بخش آرگومان های ورودی و بخش بدنه متد و همچنین یک عملگر -> که ارتباط بین آرگومان های ورودی و بدنه را نشان میدهد:
(arguments)-> {body}
در واقع در پشت هر عبارت لامبدا، یک فانکشنال اینترفیس قرار گرفته است. به اینصورت که ارگومان های ورودی همان ورودی های تک متد ابسترکت و بدنه نیز همان بدنه تک متد آبسترکت میباشد تنها با این تفاوت که لزومی به نوشتن اسم متد نیست. برای مثال بجای نوشتن کلاس انانیموس بالا میتوان فقط بصورت زیر عمل کرد:
IPrinter printer =(String str) -> System.out.println(str);
printer.print("Hello World");
حتی ازین مختصر تر هم میتوان نوشت. از آنجا که کمپایلر متوجه نوع ورودی متد میباشد، میتوانید از نوشتن نوع پارامتر ورودی نیز صرف نظر کنید:
IPrinter printer =(str) -> System.out.println(str);
printer.print("Hello World");
🔰 مثال 2:
فرض کنید یک اینترفیس فانکشنال بصورت زیر داریم که وظیفه تبدیل رشته به عدد را بر عهده دارد:
@FunctionalInterface
interface IConverter<T>{
T Converter(String input);
}
در اینجا T به معنای خروجی متد از هر نوعی است. یعنی به جای T میتوانیم هر نوع داده ای قرار دهیم. برای مثال اگر T معادل Integer باشد، یعنی خروجی متد ما در اینترفیس یک Integer خواهد بود (بجای T حتما باید یک نوع داده مرجع قرار گیرد. مثلا Integer,Double,String, Object... )
با توجه به تعریفی که از عبارت لامبدا کردیم، میتوانیم IConverter را بصورت زیر پیاده سازی کنیم:
IConverter<Integer> toInteger = (str) -> Integer.parseInt(str);
System.out.println(toInteger.convert("1234") + 1); // OUTPUT = 1235
————
〽️ @PIECEJAVA
🔆 فانکشنال اینترفیس در واقع به اینترفیسی گفته میشود که تنها یک متد ابسترکت را داشته باشد (Single Abstract Method) هر چند که همچنان میتواند دارای متد های استاتیک و دیفالت باشد. برای نشانه گذاری اینترفیس فانکشنال، از انوتیشن @FunctionalInterface استفاده میشود. در واقع نشانه گذاری اینترفیس بعنوان فانکشنال، از نوشتن متد های ابسترکت اضافه جلوگیری میکند (اگه متد ابسترکت جدید اضافه کنین، کمپایلر بهتون یادآوری میکنه)
🔅 یکی از دلایل اهمیت فانکشنال اینترفیس، به برنامه نویس امکان استفاده از عبارات لامبدا را میدهد بدون اینکه نیاز باشد کلاسی را بصورت بی نام (Anonymous) و فقط جهت استفاده از اینترفیس تعریف کند.
نمونه ای از تعریف کلاس Anonymous در متد مین با پیاده سازی اینترفیس فانکشنال IPrinter:
public class Main {
public static void main(String[] args) {
IPrinter printer = new IPrinter() {
@Override
public void print(String str) {
System.out.println(str);
}
};
printer.print("Hello World");
}
}
@FunctionalInterface
interface IPrinter{
void print(String str);
}
⁉️ عبارت لامبدا چیست؟
عبارت لامبدا صرفا متدی است بدون اسم و نشان که از سه بخش تشکیل شده است. بخش آرگومان های ورودی و بخش بدنه متد و همچنین یک عملگر -> که ارتباط بین آرگومان های ورودی و بدنه را نشان میدهد:
(arguments)-> {body}
در واقع در پشت هر عبارت لامبدا، یک فانکشنال اینترفیس قرار گرفته است. به اینصورت که ارگومان های ورودی همان ورودی های تک متد ابسترکت و بدنه نیز همان بدنه تک متد آبسترکت میباشد تنها با این تفاوت که لزومی به نوشتن اسم متد نیست. برای مثال بجای نوشتن کلاس انانیموس بالا میتوان فقط بصورت زیر عمل کرد:
IPrinter printer =(String str) -> System.out.println(str);
printer.print("Hello World");
حتی ازین مختصر تر هم میتوان نوشت. از آنجا که کمپایلر متوجه نوع ورودی متد میباشد، میتوانید از نوشتن نوع پارامتر ورودی نیز صرف نظر کنید:
IPrinter printer =(str) -> System.out.println(str);
printer.print("Hello World");
🔰 مثال 2:
فرض کنید یک اینترفیس فانکشنال بصورت زیر داریم که وظیفه تبدیل رشته به عدد را بر عهده دارد:
@FunctionalInterface
interface IConverter<T>{
T Converter(String input);
}
در اینجا T به معنای خروجی متد از هر نوعی است. یعنی به جای T میتوانیم هر نوع داده ای قرار دهیم. برای مثال اگر T معادل Integer باشد، یعنی خروجی متد ما در اینترفیس یک Integer خواهد بود (بجای T حتما باید یک نوع داده مرجع قرار گیرد. مثلا Integer,Double,String, Object... )
با توجه به تعریفی که از عبارت لامبدا کردیم، میتوانیم IConverter را بصورت زیر پیاده سازی کنیم:
IConverter<Integer> toInteger = (str) -> Integer.parseInt(str);
System.out.println(toInteger.convert("1234") + 1); // OUTPUT = 1235
————
〽️ @PIECEJAVA
👍8❤4
💠 کلاس های تو در تو در جاوا
🕗زمان مطالعه: 1:30 دقیقه
🔆 یکی از ویژگی های زبان جاوا، تعریف کلاس ها بصورت تو در تو میباشد. در واقع این قابلیت به شما اجازه میدهد که کلاس های مرتبط به هم را دسته بندی کنید. یا به عبارتی کلاس هایی که فقط در کنار هم استفاده میشوند و استفاده خارجی ندارند (مثلا تعریف کلاس Node داخل کلاس LinkedList). این کار در واقع علاوه بر افزایش کارآمدی کد، به خوانایی کد نیز کمک میکند.
🔅 مزایای استفاده از کلاس های تو در تو:
- کلاس داخلی به اعضای کلاس خارجی نیز دسترسی دارد.
- کلاس داخلی میتواند پرایوت یا حتی استاتیک تعریف شود
- کلاس داخلی خود به گونه ای عضوی از کلاس خارجی است. پس بدون ایجاد نمونه از کلاس خارجی، نمیتوان به آن دست پیدا کرد:
class OuterClass
{
...
class NestedClass
{
...
}
}
🟡 برای نمونه سازی از کلاس داخلی، کافیست اول از کلاس خارجی نمونه ای ایجاد کنید:
OuterClass outer = new OuterClass();
و حالا از طریق نمونه outer اقدام به ایجاد نمونه از کلاس داخلی کنید:
OuterClass.InnerClass inner = o. new InnerClass();
همانطور که پیش تر اشاره کردیم، کلاس داخلی کاملا به کلاس خارجی متصل است. پس بدون ایجاد از نمونه خارجی نمیتوانید از کلاس داخلی هم نمونه ای ایجاد کنید.
🟡 اما درصورتی که کلاس داخلی استاتیک باشد، بدون اینکه نیاز به ساختن نمونه از کلاس خارجی باشد، میتوانید از کلاس داخلی نمونه خود را ایجاد کنید:
OuterClass.InnerClass staticInner = new OuterClass.InnerClass();
🔺 ضمنا کلاس استاتیک به راحتی به اعضای استاتیک کلاس خارجی دسترسی دارد اما برای دسترسی به باقی اعضا، حتما باید از کلاس خارجی در این کلاس یک نمونه ایجاد کنید.
🔰 مثال از کلاس های تو در تو:
class Car{
class Engine{
}
}
——-——
class LinkedList{
class Node{
}
}
———
#innerClasses #staticClasses #Class #nested #nestedClasses
〽️ @PieceJava
🕗زمان مطالعه: 1:30 دقیقه
🔆 یکی از ویژگی های زبان جاوا، تعریف کلاس ها بصورت تو در تو میباشد. در واقع این قابلیت به شما اجازه میدهد که کلاس های مرتبط به هم را دسته بندی کنید. یا به عبارتی کلاس هایی که فقط در کنار هم استفاده میشوند و استفاده خارجی ندارند (مثلا تعریف کلاس Node داخل کلاس LinkedList). این کار در واقع علاوه بر افزایش کارآمدی کد، به خوانایی کد نیز کمک میکند.
🔅 مزایای استفاده از کلاس های تو در تو:
- کلاس داخلی به اعضای کلاس خارجی نیز دسترسی دارد.
- کلاس داخلی میتواند پرایوت یا حتی استاتیک تعریف شود
- کلاس داخلی خود به گونه ای عضوی از کلاس خارجی است. پس بدون ایجاد نمونه از کلاس خارجی، نمیتوان به آن دست پیدا کرد:
class OuterClass
{
...
class NestedClass
{
...
}
}
🟡 برای نمونه سازی از کلاس داخلی، کافیست اول از کلاس خارجی نمونه ای ایجاد کنید:
OuterClass outer = new OuterClass();
و حالا از طریق نمونه outer اقدام به ایجاد نمونه از کلاس داخلی کنید:
OuterClass.InnerClass inner = o. new InnerClass();
همانطور که پیش تر اشاره کردیم، کلاس داخلی کاملا به کلاس خارجی متصل است. پس بدون ایجاد از نمونه خارجی نمیتوانید از کلاس داخلی هم نمونه ای ایجاد کنید.
🟡 اما درصورتی که کلاس داخلی استاتیک باشد، بدون اینکه نیاز به ساختن نمونه از کلاس خارجی باشد، میتوانید از کلاس داخلی نمونه خود را ایجاد کنید:
OuterClass.InnerClass staticInner = new OuterClass.InnerClass();
🔺 ضمنا کلاس استاتیک به راحتی به اعضای استاتیک کلاس خارجی دسترسی دارد اما برای دسترسی به باقی اعضا، حتما باید از کلاس خارجی در این کلاس یک نمونه ایجاد کنید.
🔰 مثال از کلاس های تو در تو:
class Car{
class Engine{
}
}
——-——
class LinkedList{
class Node{
}
}
———
#innerClasses #staticClasses #Class #nested #nestedClasses
〽️ @PieceJava
👍7❤1
تیکه پاره های جاوا
💠 کلاس های تو در تو در جاوا 🕗زمان مطالعه: 1:30 دقیقه 🔆 یکی از ویژگی های زبان جاوا، تعریف کلاس ها بصورت تو در تو میباشد. در واقع این قابلیت به شما اجازه میدهد که کلاس های مرتبط به هم را دسته بندی کنید. یا به عبارتی کلاس هایی که فقط در کنار هم استفاده میشوند…
💬 میدونستین تو متد های کلاساتونم هم میتونین کلاس داخلی تعریف کنین؟...😁
👍16👎3
Media is too big
VIEW IN TELEGRAM
#یکبار_برای_همیشه
چرا وقتی یک آبجکت رو چاپ میکنیم، خروجی زیر رو داره؟
[I@12b231e
Employee@312b4a3
- خروجی بالا دقیقا چیه؟
- چجور میشه تغییرش داد؟
- هش کد چیه؟ ادرس حافظست یا...؟
- متد toString چیست؟
⭕️ هنگ درام: کیا رکنی
———
#hashcode #toString
🟡 @PieceJava
چرا وقتی یک آبجکت رو چاپ میکنیم، خروجی زیر رو داره؟
[I@12b231e
Employee@312b4a3
- خروجی بالا دقیقا چیه؟
- چجور میشه تغییرش داد؟
- هش کد چیه؟ ادرس حافظست یا...؟
- متد toString چیست؟
⭕️ هنگ درام: کیا رکنی
———
#hashcode #toString
🟡 @PieceJava
❤13👍5👏2
💠 ده تا از پرکاربرد ترین کلید های میانبر در #Intellij_IDEA
#shortcut
#keys #Intellij #IDEA
〽️ @PiECEJAVA
#shortcut
#keys #Intellij #IDEA
〽️ @PiECEJAVA
❤5
تیکه پاره های جاوا
💠 ده تا از پرکاربرد ترین کلید های میانبر در #Intellij_IDEA #shortcut #keys #Intellij #IDEA 〽️ @PiECEJAVA
🔆 یکی از معروف ترین IDE های جاوا، اینتلجی هستش (Intellij IDEA) که توی این پست روی صحبتمون با کلیدهای میانبر پر استفاده در اینتلیجی هست:
⚡️ کلید Alt + Enter
وقتی برنامه روی یه خط کد خطای کمپایل داره (خطوطی که مستقیم قبل از اجرا خود ide زیرشون به رنگ قرمز خط میکشه) میتونید با موس روی کد کلیک کنید و Alt + Enter رو همزمان بگیرید تا پیشنهادات IDE برای رفع خطا ظاهر بشه.
البته نه فقط برای خطا بلکه اگه اخطار هم داشته باشید (هایلایت های به رنگ زرد)، در این حالت هم میتونید روی کد کلیک و با گرفتن همزمان کلید های Alt + Enter پیشنهادات اینتلیجی برای رفع اخطار رو مشاهده کنید.
⚡️کلید F2
برای رفتن به سر سطری که ارور داره بجای استفاده از اسکرول بار یا کلیک موس، میتونید از کلید F2 استفاده کنید. هر بار زدن کلید F2 باعث میشه به ارور بعدی پرش کنید.
⚡️کلید Alt+1 یا ⌘1
برای باز کردن منوی Project فقط کافیه از کلید ترکیبی Alt + 1 استفاده کنید
⚡️کلید Esc
بعد از باز کردن منوی project اگه میخواین دوباره برگردین رو صفحه کد، فقط کافیه Esc رو بزنید :)
⚡️کلید Ctrl + E یا ⌘E
بکمک این کلید ترکیبی میتونید فایل های اخیری که باز کردید رو مشاهده کنید. برای مثال آخرین کلاس هایی که چک کردید.. ضمنا بوسیله این میانبر، میتونید حتی باقی پنجره ها از جمله (Problems)(Bookmarks) و حتی اونایی که کلید میانبر هم ندارن رو مشاهده کنید.
⚡️کلید Ctrl + B یا ⌘B
احتمالا پیش اومده که توی کدتون به یه داده برخورد کردید و میخواستید بدونید که کجا تعریف شده. تو این حالت میتونید از کلید Ctrl + B استفاده کنید. در واقع از طریق این میانبر به جایی که برای اولین بار داده تعریف شده پرش میکنید.
⚡️کلید Alt + F7
اما اگه روی تعریف داده بودید ولی میخواستید ببینید که این تعریف کجا ها استفاده شده، میتونید از کلید Alt + F7 استفاده کنید.
⚡️کلید Ctrl+ W یا Shift + Ctrl + W یا ⌥↑ یا ⌥↓
💬 این یکی رو من به شخصه دوست دارم D:
بوسیله این کلید میتونید بلاک کد اطراف cursor (نشونگر ماوس) رو انتخاب کنید. مثلا به فرض اگه نشونگر روی بلاک for هستش، با زدن Ctrl + W کل بلاک for انتخاب میشه. البته با هر بار زدن این کلید، محدوده انتخابی گسترده تر و گسترده تر میشه.
⚡️کلید Ctrl + / یا ⌘/
برای کامنت کردن یک خط کد، فقط کافیه نشونگر ماوس روی خط کد باشه تا با زدن یکبار Ctrl + / کل خط به یک کامنت تک خطی تبدیل بشه
⚡️کلید میانبر Shift + Ctrl + Enter یا ⇧⌘⏎
برای کامل کردن خط کد میتونید از این کلید ترکیبی استفاده کنید. البته اجازه بدید یکم بیشتر در این مورد صحبت کنیم. مثلا حتی برای قرار دادن سمیکالن، برای قرار دادن براکت باز و بسته برای دستور if, for و... میتونید بعد از نوشتن کد، همزمان این سه کلید رو فشار بدید تا کد بصورت خودکار تکمیل بشه
—————
〽️@PiECEJAVA
⚡️ کلید Alt + Enter
وقتی برنامه روی یه خط کد خطای کمپایل داره (خطوطی که مستقیم قبل از اجرا خود ide زیرشون به رنگ قرمز خط میکشه) میتونید با موس روی کد کلیک کنید و Alt + Enter رو همزمان بگیرید تا پیشنهادات IDE برای رفع خطا ظاهر بشه.
البته نه فقط برای خطا بلکه اگه اخطار هم داشته باشید (هایلایت های به رنگ زرد)، در این حالت هم میتونید روی کد کلیک و با گرفتن همزمان کلید های Alt + Enter پیشنهادات اینتلیجی برای رفع اخطار رو مشاهده کنید.
⚡️کلید F2
برای رفتن به سر سطری که ارور داره بجای استفاده از اسکرول بار یا کلیک موس، میتونید از کلید F2 استفاده کنید. هر بار زدن کلید F2 باعث میشه به ارور بعدی پرش کنید.
⚡️کلید Alt+1 یا ⌘1
برای باز کردن منوی Project فقط کافیه از کلید ترکیبی Alt + 1 استفاده کنید
⚡️کلید Esc
بعد از باز کردن منوی project اگه میخواین دوباره برگردین رو صفحه کد، فقط کافیه Esc رو بزنید :)
⚡️کلید Ctrl + E یا ⌘E
بکمک این کلید ترکیبی میتونید فایل های اخیری که باز کردید رو مشاهده کنید. برای مثال آخرین کلاس هایی که چک کردید.. ضمنا بوسیله این میانبر، میتونید حتی باقی پنجره ها از جمله (Problems)(Bookmarks) و حتی اونایی که کلید میانبر هم ندارن رو مشاهده کنید.
⚡️کلید Ctrl + B یا ⌘B
احتمالا پیش اومده که توی کدتون به یه داده برخورد کردید و میخواستید بدونید که کجا تعریف شده. تو این حالت میتونید از کلید Ctrl + B استفاده کنید. در واقع از طریق این میانبر به جایی که برای اولین بار داده تعریف شده پرش میکنید.
⚡️کلید Alt + F7
اما اگه روی تعریف داده بودید ولی میخواستید ببینید که این تعریف کجا ها استفاده شده، میتونید از کلید Alt + F7 استفاده کنید.
⚡️کلید Ctrl+ W یا Shift + Ctrl + W یا ⌥↑ یا ⌥↓
💬 این یکی رو من به شخصه دوست دارم D:
بوسیله این کلید میتونید بلاک کد اطراف cursor (نشونگر ماوس) رو انتخاب کنید. مثلا به فرض اگه نشونگر روی بلاک for هستش، با زدن Ctrl + W کل بلاک for انتخاب میشه. البته با هر بار زدن این کلید، محدوده انتخابی گسترده تر و گسترده تر میشه.
⚡️کلید Ctrl + / یا ⌘/
برای کامنت کردن یک خط کد، فقط کافیه نشونگر ماوس روی خط کد باشه تا با زدن یکبار Ctrl + / کل خط به یک کامنت تک خطی تبدیل بشه
⚡️کلید میانبر Shift + Ctrl + Enter یا ⇧⌘⏎
برای کامل کردن خط کد میتونید از این کلید ترکیبی استفاده کنید. البته اجازه بدید یکم بیشتر در این مورد صحبت کنیم. مثلا حتی برای قرار دادن سمیکالن، برای قرار دادن براکت باز و بسته برای دستور if, for و... میتونید بعد از نوشتن کد، همزمان این سه کلید رو فشار بدید تا کد بصورت خودکار تکمیل بشه
—————
〽️@PiECEJAVA
❤11👍6
This media is not supported in your browser
VIEW IN TELEGRAM
#فان
از امروز چاپ هلو ورلد فقط اینطوری😁👍
import java.util.Random;
public class Helloworld {
public static void main(String[] args) throws InterruptedException {
String expectedOutput = "HELLO WORLD :D";
String guessOutput = "";
Random random = new Random();
int min = 32;
int max = 127;
int i = 0;
do {
char expectedChar = expectedOutput.charAt(i);
char randomGuess = (char) (random.nextInt(max - min) + min);
System.out.println(guessOutput + randomGuess);
Thread.sleep(1);
if (randomGuess == expectedChar) {
guessOutput+=randomGuess;
i++;
}
} while (i != expectedOutput.length());
}
}
———
〽️@PieceJava
از امروز چاپ هلو ورلد فقط اینطوری😁👍
import java.util.Random;
public class Helloworld {
public static void main(String[] args) throws InterruptedException {
String expectedOutput = "HELLO WORLD :D";
String guessOutput = "";
Random random = new Random();
int min = 32;
int max = 127;
int i = 0;
do {
char expectedChar = expectedOutput.charAt(i);
char randomGuess = (char) (random.nextInt(max - min) + min);
System.out.println(guessOutput + randomGuess);
Thread.sleep(1);
if (randomGuess == expectedChar) {
guessOutput+=randomGuess;
i++;
}
} while (i != expectedOutput.length());
}
}
———
〽️@PieceJava
😁7👍3👏3🤔1
