جاوا

جلسه ۸: عبارات و عملگرهای حسابی در جاوا

class Increment {
  public static void main(String[] args) {
    int x;
    
    x = 5;
    x += 1;
    System.out.println("x = " + x);
    
    x++;
    System.out.println("x = " + x);
  }
}
دستورات انتساب متغیرها مانند x = 4 ، مقدار یک متغیر را تغییر می دهند. در C و Java ، این انتساب ها مقداری نیز تولید می کنند که می تواند مورد استفاده قرار گیرد. x = 4 مقدار ۴ را تولید می کند. بنابراین تکه کد y = (x = 4) در متغیر y عدد ۴ را ذخیره می کند. (در این عبارت به پرانتز نیازی نیست ، اما آنچه اتفاق می افتد را خواناتر می کند) به طور مشابه ، ++x (به محل قرار گیری ++ که سمت راست متغیر است توجه کنید) یک مقدار تولید می کند: مقدار x قبل از اضافه کردن ۱ به x. از آنجا که ابتدا مقدار نتیجه عبارت تولید می شود و سپس متغیر افزایش می یابد ، این عملگر post-increment یا پس افزا نامیده می شود. از طرف دیگر ، x++ (به محل قرار گیری ++ که سمت چپ متغیر است توجه کنید) ابتدا متغیر را افزایش می دهد و سپس مقدار نتیجه عبارت را تولید می کند. از این رو این عملگر pre-increment یا پیش افزا نامیده می شود. استفاده بیش از حد هوشمندانه و پیچیده از عملگرهای ++ و -- دلیل مشترک خطاهایی هستند که به سختی قابل کشف اند. من تقریبا همیشه ++x را روی یک خط به تنهایی می نویسم و هرگز از x++ استفاده نمی کنم چون با این کار کد خواناتر می شود. فقط به این دلیل که می توانید کدهای دشوار و غیرقابل فهمی مانند x + = (y-- - (x = 4)) را بنویسید به این معنی نیست که باید این کار را انجام دهید.
class Preincrement {
  public static void main(String[] args) {
    int x = 5;
    int y = 5;
 
    // The ++ operator changes the value 
    //  of the variable, but you can also
    //  use the result in an expression:
    
    System.out.println(x++);  // post-increment
    System.out.println(++y);  // pre-increment
    
    // assignment statements are also expressions.
    //  However, the code below is bad: it's too likely
    //  to be a typo; probably you wanted ==, the
    //  the equality comparison.
    System.out.println(x = y); 
    
    // Truly horrible programming style:
    System.out.println(x += (y-- - (x = 4) ));
  } 
}
class Modulus {
  public static void main(String args[]) {
    // Three cents left over after distributing
    // three pennies to each of my five nieces:
    System.out.println(18 % 5);
  }
}

اپراتورهای تبدیل نوع

بعضی اوقات ، ممکن است نیاز داشته باشید که جاوا یک نوع داده را به نوع دیگری تبدیل کند یا به صورت صریح نوع مورد استفاده را مشخص کنید. به عنوان مثال ، اگر دو متغیر int دارید و می خواهید آنها را تقسیم کنید تا یک عدد کسری بدست آورید ، ممکن است آن مقادیر را به مقادیر double تبدیل کنید. می توانید این کار را با تغییر نوع مقادیر که به آن typecasting یا به اختصار casting می گویند ، انجام دهید. یک عملگر cast با استفاده از قرار دادن نوع مورد نیاز داخل پرانتز و قبل از مقداری که باید تبدیل شود نوشته می شود. به عنوان مثال ، ۵ (double) مقدار ۵٫۰ را ارائه می دهد. در حال حاضر ، ما بیشتر بین انواع عددی cast خواهیم کرد. بر خلاف Javascript یا Python ، شما نمی توانید int یا double را به یک رشته یا از یک رشته به عدد تبدیل کنید ، بلکه باید از متد های خاصی که در کلاس String ، Integer یا Double است استفاده کنید.

تبدیل نوع به صورت ضمنی و صریح

گاهی اوقات ، جاوا به طور خودکار عمل تبدیل نوع (casting) را انجام می دهد. به عنوان مثال ، اگر تقسیمی به صورت ۱۸٫۰ / ۵ بنویسید ، جاوا تصمیم می گیرد که ۵ را به صورت ضمنی به عدد ممیز شناور ۵٫۰ ، تبدیل کند. مثال دیگر double x = 5 است. ۵ در سمت راست یک نوع داده عدد صحیح است ، اما جاوا می داند که باید آن را به double تبدیل کند. از طرف دیگر ، int x = 5.6 کار نمی کند. جاوا متوجه می شود که شما می خواهید یک عدد ممیزشناور را در متغیر int ذخیره کنید و به شما هشدار می دهد که این ممکن است باعث کاهش دقت شود. با استفاده از یک عملگر casting می توانید به صورت صریح به جاوا اطمینان دهید: int x = (int) 5.6. توجه داشته باشید که هنگام ذخیره یک عدد اعشاری در یک متغیر صحیح ، قسمت بعد از اعشاری حذف می شود ، ولی گرد نمی شود ، بنابراین این عبارت مقدار ۵ را در x ذخیره می کند و نه ۶٫

عملگرهای ترکیبی انتساب و محاسبه

مانند بسیاری از زبانهای دیگر ، جاوا اجازه می دهد تا محاسبات و انتساب با عملگرهای =+ ، =- ، =/ ، =* ترکیب شود. بنابراین ، x += 4 مقدار x را ۴ واحد افزایش می دهد.

عملگرهای افزایشی و کاهشی ++ و --

جاوا ، جاوااسکریپت ، C و ++C همه دارای عملگرهای افزایشی هستند که به شیوه ای یکسان کار می کنند. ولی پایتون چنین عملگری ندارد. عملگر ++ یک واحد به یک مقدار اضافه می کند و -- یک واحد کم می کند. این عملگرها در جاوا برای حلقه های for و while بسیار مفید هستند که به زودی و در جلسه های بعدی این مجموعه آموزشی شاهد آن خواهیم بود. از این عملگرها برای کوتاه سازی اپراتورهای انتساب ترکیبی استفاده می شود: شما می توانید تکه کد x += 1 را با کد کوتاه تر و ساده تر x++ جایگزین کنید.
class Increment {
  public static void main(String[] args) {
    int x;
    
    x = 5;
    x += 1;
    System.out.println("x = " + x);
    
    x++;
    System.out.println("x = " + x);
  }
}
دستورات انتساب متغیرها مانند x = 4 ، مقدار یک متغیر را تغییر می دهند. در C و Java ، این انتساب ها مقداری نیز تولید می کنند که می تواند مورد استفاده قرار گیرد. x = 4 مقدار ۴ را تولید می کند. بنابراین تکه کد y = (x = 4) در متغیر y عدد ۴ را ذخیره می کند. (در این عبارت به پرانتز نیازی نیست ، اما آنچه اتفاق می افتد را خواناتر می کند) به طور مشابه ، ++x (به محل قرار گیری ++ که سمت راست متغیر است توجه کنید) یک مقدار تولید می کند: مقدار x قبل از اضافه کردن ۱ به x. از آنجا که ابتدا مقدار نتیجه عبارت تولید می شود و سپس متغیر افزایش می یابد ، این عملگر post-increment یا پس افزا نامیده می شود. از طرف دیگر ، x++ (به محل قرار گیری ++ که سمت چپ متغیر است توجه کنید) ابتدا متغیر را افزایش می دهد و سپس مقدار نتیجه عبارت را تولید می کند. از این رو این عملگر pre-increment یا پیش افزا نامیده می شود. استفاده بیش از حد هوشمندانه و پیچیده از عملگرهای ++ و -- دلیل مشترک خطاهایی هستند که به سختی قابل کشف اند. من تقریبا همیشه ++x را روی یک خط به تنهایی می نویسم و هرگز از x++ استفاده نمی کنم چون با این کار کد خواناتر می شود. فقط به این دلیل که می توانید کدهای دشوار و غیرقابل فهمی مانند x + = (y-- - (x = 4)) را بنویسید به این معنی نیست که باید این کار را انجام دهید.
class Preincrement {
  public static void main(String[] args) {
    int x = 5;
    int y = 5;
 
    // The ++ operator changes the value 
    //  of the variable, but you can also
    //  use the result in an expression:
    
    System.out.println(x++);  // post-increment
    System.out.println(++y);  // pre-increment
    
    // assignment statements are also expressions.
    //  However, the code below is bad: it's too likely
    //  to be a typo; probably you wanted ==, the
    //  the equality comparison.
    System.out.println(x = y); 
    
    // Truly horrible programming style:
    System.out.println(x += (y-- - (x = 4) ));
  } 
}
class DivisionTypes {
  public static void main(String args[]) {
    System.out.println(18 / 5);
    System.out.println(18.0 / 5.0);
  }
}
اگر به مقدار باقیمانده پس از تقسیم عدد صحیح نیاز دارید ، می توانید از عملگر مدول (%) استفاده کنید:
class Modulus {
  public static void main(String args[]) {
    // Three cents left over after distributing
    // three pennies to each of my five nieces:
    System.out.println(18 % 5);
  }
}

اپراتورهای تبدیل نوع

بعضی اوقات ، ممکن است نیاز داشته باشید که جاوا یک نوع داده را به نوع دیگری تبدیل کند یا به صورت صریح نوع مورد استفاده را مشخص کنید. به عنوان مثال ، اگر دو متغیر int دارید و می خواهید آنها را تقسیم کنید تا یک عدد کسری بدست آورید ، ممکن است آن مقادیر را به مقادیر double تبدیل کنید. می توانید این کار را با تغییر نوع مقادیر که به آن typecasting یا به اختصار casting می گویند ، انجام دهید. یک عملگر cast با استفاده از قرار دادن نوع مورد نیاز داخل پرانتز و قبل از مقداری که باید تبدیل شود نوشته می شود. به عنوان مثال ، ۵ (double) مقدار ۵٫۰ را ارائه می دهد. در حال حاضر ، ما بیشتر بین انواع عددی cast خواهیم کرد. بر خلاف Javascript یا Python ، شما نمی توانید int یا double را به یک رشته یا از یک رشته به عدد تبدیل کنید ، بلکه باید از متد های خاصی که در کلاس String ، Integer یا Double است استفاده کنید.

تبدیل نوع به صورت ضمنی و صریح

گاهی اوقات ، جاوا به طور خودکار عمل تبدیل نوع (casting) را انجام می دهد. به عنوان مثال ، اگر تقسیمی به صورت ۱۸٫۰ / ۵ بنویسید ، جاوا تصمیم می گیرد که ۵ را به صورت ضمنی به عدد ممیز شناور ۵٫۰ ، تبدیل کند. مثال دیگر double x = 5 است. ۵ در سمت راست یک نوع داده عدد صحیح است ، اما جاوا می داند که باید آن را به double تبدیل کند. از طرف دیگر ، int x = 5.6 کار نمی کند. جاوا متوجه می شود که شما می خواهید یک عدد ممیزشناور را در متغیر int ذخیره کنید و به شما هشدار می دهد که این ممکن است باعث کاهش دقت شود. با استفاده از یک عملگر casting می توانید به صورت صریح به جاوا اطمینان دهید: int x = (int) 5.6. توجه داشته باشید که هنگام ذخیره یک عدد اعشاری در یک متغیر صحیح ، قسمت بعد از اعشاری حذف می شود ، ولی گرد نمی شود ، بنابراین این عبارت مقدار ۵ را در x ذخیره می کند و نه ۶٫

عملگرهای ترکیبی انتساب و محاسبه

مانند بسیاری از زبانهای دیگر ، جاوا اجازه می دهد تا محاسبات و انتساب با عملگرهای =+ ، =- ، =/ ، =* ترکیب شود. بنابراین ، x += 4 مقدار x را ۴ واحد افزایش می دهد.

عملگرهای افزایشی و کاهشی ++ و --

جاوا ، جاوااسکریپت ، C و ++C همه دارای عملگرهای افزایشی هستند که به شیوه ای یکسان کار می کنند. ولی پایتون چنین عملگری ندارد. عملگر ++ یک واحد به یک مقدار اضافه می کند و -- یک واحد کم می کند. این عملگرها در جاوا برای حلقه های for و while بسیار مفید هستند که به زودی و در جلسه های بعدی این مجموعه آموزشی شاهد آن خواهیم بود. از این عملگرها برای کوتاه سازی اپراتورهای انتساب ترکیبی استفاده می شود: شما می توانید تکه کد x += 1 را با کد کوتاه تر و ساده تر x++ جایگزین کنید.
class Increment {
  public static void main(String[] args) {
    int x;
    
    x = 5;
    x += 1;
    System.out.println("x = " + x);
    
    x++;
    System.out.println("x = " + x);
  }
}
دستورات انتساب متغیرها مانند x = 4 ، مقدار یک متغیر را تغییر می دهند. در C و Java ، این انتساب ها مقداری نیز تولید می کنند که می تواند مورد استفاده قرار گیرد. x = 4 مقدار ۴ را تولید می کند. بنابراین تکه کد y = (x = 4) در متغیر y عدد ۴ را ذخیره می کند. (در این عبارت به پرانتز نیازی نیست ، اما آنچه اتفاق می افتد را خواناتر می کند) به طور مشابه ، ++x (به محل قرار گیری ++ که سمت راست متغیر است توجه کنید) یک مقدار تولید می کند: مقدار x قبل از اضافه کردن ۱ به x. از آنجا که ابتدا مقدار نتیجه عبارت تولید می شود و سپس متغیر افزایش می یابد ، این عملگر post-increment یا پس افزا نامیده می شود. از طرف دیگر ، x++ (به محل قرار گیری ++ که سمت چپ متغیر است توجه کنید) ابتدا متغیر را افزایش می دهد و سپس مقدار نتیجه عبارت را تولید می کند. از این رو این عملگر pre-increment یا پیش افزا نامیده می شود. استفاده بیش از حد هوشمندانه و پیچیده از عملگرهای ++ و -- دلیل مشترک خطاهایی هستند که به سختی قابل کشف اند. من تقریبا همیشه ++x را روی یک خط به تنهایی می نویسم و هرگز از x++ استفاده نمی کنم چون با این کار کد خواناتر می شود. فقط به این دلیل که می توانید کدهای دشوار و غیرقابل فهمی مانند x + = (y-- - (x = 4)) را بنویسید به این معنی نیست که باید این کار را انجام دهید.
class Preincrement {
  public static void main(String[] args) {
    int x = 5;
    int y = 5;
 
    // The ++ operator changes the value 
    //  of the variable, but you can also
    //  use the result in an expression:
    
    System.out.println(x++);  // post-increment
    System.out.println(++y);  // pre-increment
    
    // assignment statements are also expressions.
    //  However, the code below is bad: it's too likely
    //  to be a typo; probably you wanted ==, the
    //  the equality comparison.
    System.out.println(x = y); 
    
    // Truly horrible programming style:
    System.out.println(x += (y-- - (x = 4) ));
  } 
}
class ExpressionOperand {
	public static void main(String args[]) {
    int x;
    x = (3 * 6) + 24;
    System.out.println(x);
  }
}
باید از دو نکته آگاه باشید:
  1. مانند C یا ++C ، اما برخلاف Javascript یا Python3 ، تقسیم دو عدد صحیح یک عدد صحیح را به همراه دارد.
  2. اپراتورهایی که بر دو نوع مختلف اعمال شده اند (مانند ۲ + ۱٫۷) نوع محدودتر را گسترش می دهند یا تبدیل خودکار می کنند. در محاسبه عبارت ۲ + ۱٫۷ عدد ۲ که یک عدد صحیح است به عدد ممیز شناور ۲٫۰ تبدیل می شود و مقدار حاصل یک عدد ممیزشناور است که باید در یک متغیر از نوع float یا double ذخیره شود.

تقسیم عدد صحیح و ممیز شناور

تقسیم بر دو نوع است و هر یک از آنها گاهی اوقات مفید است. در تقسیم عدد صحیح دو عدد صحیح بر هم تقسیم می شوند و نتیجه تقسیم یک عدد صحیح است. در تقسیم ممیز شناور دو عدد ممیز شناور (اعداد با ممیز اعشاری) بر هم تقسیم می شوند و نتیجه تقسیم یک عدد ممیزشناور است. اگر یکی از اعداد صحیح و دیگری ممیزشناور باشد نیز تقسیم از نوع ممیزشناور در نظر گرفته می شود. فرض کنید من ۱۸ تومان و ۵ خواهرزاده دارم. چه مقدار پول باید به هر کدام بدهم؟ با تقسیم نقطه شناور ، ۱۸/۵ = ۳٫۶ ، اما توزیع ۰٫۶ تومان به صورت نقدی دشوار است و خواهرزاده های من از پول خرد خوششان نمی آید. تقسیم عدد صحیح مقدار ۳ را می دهد. اگر هر دو عامل در عملگر تقسیم (/) صحیح باشند ، جاوا از تقسیم عدد صحیح استفاده می کند. اگر هر یک از عملوندها یک مقدار ممیزشناور باشد ، جاوا از تقسیم ممیزشناور استفاده می کند. با افزودن یک نقطه اعشاری و یک صفر می توانید از انجام تقسیم ممیزشناور اطمینان حاصل کنید:
class DivisionTypes {
  public static void main(String args[]) {
    System.out.println(18 / 5);
    System.out.println(18.0 / 5.0);
  }
}
اگر به مقدار باقیمانده پس از تقسیم عدد صحیح نیاز دارید ، می توانید از عملگر مدول (%) استفاده کنید:
class Modulus {
  public static void main(String args[]) {
    // Three cents left over after distributing
    // three pennies to each of my five nieces:
    System.out.println(18 % 5);
  }
}

اپراتورهای تبدیل نوع

بعضی اوقات ، ممکن است نیاز داشته باشید که جاوا یک نوع داده را به نوع دیگری تبدیل کند یا به صورت صریح نوع مورد استفاده را مشخص کنید. به عنوان مثال ، اگر دو متغیر int دارید و می خواهید آنها را تقسیم کنید تا یک عدد کسری بدست آورید ، ممکن است آن مقادیر را به مقادیر double تبدیل کنید. می توانید این کار را با تغییر نوع مقادیر که به آن typecasting یا به اختصار casting می گویند ، انجام دهید. یک عملگر cast با استفاده از قرار دادن نوع مورد نیاز داخل پرانتز و قبل از مقداری که باید تبدیل شود نوشته می شود. به عنوان مثال ، ۵ (double) مقدار ۵٫۰ را ارائه می دهد. در حال حاضر ، ما بیشتر بین انواع عددی cast خواهیم کرد. بر خلاف Javascript یا Python ، شما نمی توانید int یا double را به یک رشته یا از یک رشته به عدد تبدیل کنید ، بلکه باید از متد های خاصی که در کلاس String ، Integer یا Double است استفاده کنید.

تبدیل نوع به صورت ضمنی و صریح

گاهی اوقات ، جاوا به طور خودکار عمل تبدیل نوع (casting) را انجام می دهد. به عنوان مثال ، اگر تقسیمی به صورت ۱۸٫۰ / ۵ بنویسید ، جاوا تصمیم می گیرد که ۵ را به صورت ضمنی به عدد ممیز شناور ۵٫۰ ، تبدیل کند. مثال دیگر double x = 5 است. ۵ در سمت راست یک نوع داده عدد صحیح است ، اما جاوا می داند که باید آن را به double تبدیل کند. از طرف دیگر ، int x = 5.6 کار نمی کند. جاوا متوجه می شود که شما می خواهید یک عدد ممیزشناور را در متغیر int ذخیره کنید و به شما هشدار می دهد که این ممکن است باعث کاهش دقت شود. با استفاده از یک عملگر casting می توانید به صورت صریح به جاوا اطمینان دهید: int x = (int) 5.6. توجه داشته باشید که هنگام ذخیره یک عدد اعشاری در یک متغیر صحیح ، قسمت بعد از اعشاری حذف می شود ، ولی گرد نمی شود ، بنابراین این عبارت مقدار ۵ را در x ذخیره می کند و نه ۶٫

عملگرهای ترکیبی انتساب و محاسبه

مانند بسیاری از زبانهای دیگر ، جاوا اجازه می دهد تا محاسبات و انتساب با عملگرهای =+ ، =- ، =/ ، =* ترکیب شود. بنابراین ، x += 4 مقدار x را ۴ واحد افزایش می دهد.

عملگرهای افزایشی و کاهشی ++ و --

جاوا ، جاوااسکریپت ، C و ++C همه دارای عملگرهای افزایشی هستند که به شیوه ای یکسان کار می کنند. ولی پایتون چنین عملگری ندارد. عملگر ++ یک واحد به یک مقدار اضافه می کند و -- یک واحد کم می کند. این عملگرها در جاوا برای حلقه های for و while بسیار مفید هستند که به زودی و در جلسه های بعدی این مجموعه آموزشی شاهد آن خواهیم بود. از این عملگرها برای کوتاه سازی اپراتورهای انتساب ترکیبی استفاده می شود: شما می توانید تکه کد x += 1 را با کد کوتاه تر و ساده تر x++ جایگزین کنید.
class Increment {
  public static void main(String[] args) {
    int x;
    
    x = 5;
    x += 1;
    System.out.println("x = " + x);
    
    x++;
    System.out.println("x = " + x);
  }
}
دستورات انتساب متغیرها مانند x = 4 ، مقدار یک متغیر را تغییر می دهند. در C و Java ، این انتساب ها مقداری نیز تولید می کنند که می تواند مورد استفاده قرار گیرد. x = 4 مقدار ۴ را تولید می کند. بنابراین تکه کد y = (x = 4) در متغیر y عدد ۴ را ذخیره می کند. (در این عبارت به پرانتز نیازی نیست ، اما آنچه اتفاق می افتد را خواناتر می کند) به طور مشابه ، ++x (به محل قرار گیری ++ که سمت راست متغیر است توجه کنید) یک مقدار تولید می کند: مقدار x قبل از اضافه کردن ۱ به x. از آنجا که ابتدا مقدار نتیجه عبارت تولید می شود و سپس متغیر افزایش می یابد ، این عملگر post-increment یا پس افزا نامیده می شود. از طرف دیگر ، x++ (به محل قرار گیری ++ که سمت چپ متغیر است توجه کنید) ابتدا متغیر را افزایش می دهد و سپس مقدار نتیجه عبارت را تولید می کند. از این رو این عملگر pre-increment یا پیش افزا نامیده می شود. استفاده بیش از حد هوشمندانه و پیچیده از عملگرهای ++ و -- دلیل مشترک خطاهایی هستند که به سختی قابل کشف اند. من تقریبا همیشه ++x را روی یک خط به تنهایی می نویسم و هرگز از x++ استفاده نمی کنم چون با این کار کد خواناتر می شود. فقط به این دلیل که می توانید کدهای دشوار و غیرقابل فهمی مانند x + = (y-- - (x = 4)) را بنویسید به این معنی نیست که باید این کار را انجام دهید.
class Preincrement {
  public static void main(String[] args) {
    int x = 5;
    int y = 5;
 
    // The ++ operator changes the value 
    //  of the variable, but you can also
    //  use the result in an expression:
    
    System.out.println(x++);  // post-increment
    System.out.println(++y);  // pre-increment
    
    // assignment statements are also expressions.
    //  However, the code below is bad: it's too likely
    //  to be a typo; probably you wanted ==, the
    //  the equality comparison.
    System.out.println(x = y); 
    
    // Truly horrible programming style:
    System.out.println(x += (y-- - (x = 4) ));
  } 
}
در این جلسه با نحوه محاسبه عبارات در جاوا و نحوه تبدیل بین انواع مختلف داده ها با استفاده از Casting آشنا می شوید. همچنین اهمیت تفاوت بین اعداد صحیح و اعداد اعشاری و مشکلات ناشی از عدم توجه به آن را بررسی می کنیم. همانطور که در نمونه کد زیر می بینید محاسبات ریاضی در جاوا مانند سایر زبان های برنامه نویسی است:
class ExpressionOperand {
	public static void main(String args[]) {
    int x;
    x = (3 * 6) + 24;
    System.out.println(x);
  }
}
باید از دو نکته آگاه باشید:
  1. مانند C یا ++C ، اما برخلاف Javascript یا Python3 ، تقسیم دو عدد صحیح یک عدد صحیح را به همراه دارد.
  2. اپراتورهایی که بر دو نوع مختلف اعمال شده اند (مانند ۲ + ۱٫۷) نوع محدودتر را گسترش می دهند یا تبدیل خودکار می کنند. در محاسبه عبارت ۲ + ۱٫۷ عدد ۲ که یک عدد صحیح است به عدد ممیز شناور ۲٫۰ تبدیل می شود و مقدار حاصل یک عدد ممیزشناور است که باید در یک متغیر از نوع float یا double ذخیره شود.

تقسیم عدد صحیح و ممیز شناور

تقسیم بر دو نوع است و هر یک از آنها گاهی اوقات مفید است. در تقسیم عدد صحیح دو عدد صحیح بر هم تقسیم می شوند و نتیجه تقسیم یک عدد صحیح است. در تقسیم ممیز شناور دو عدد ممیز شناور (اعداد با ممیز اعشاری) بر هم تقسیم می شوند و نتیجه تقسیم یک عدد ممیزشناور است. اگر یکی از اعداد صحیح و دیگری ممیزشناور باشد نیز تقسیم از نوع ممیزشناور در نظر گرفته می شود. فرض کنید من ۱۸ تومان و ۵ خواهرزاده دارم. چه مقدار پول باید به هر کدام بدهم؟ با تقسیم نقطه شناور ، ۱۸/۵ = ۳٫۶ ، اما توزیع ۰٫۶ تومان به صورت نقدی دشوار است و خواهرزاده های من از پول خرد خوششان نمی آید. تقسیم عدد صحیح مقدار ۳ را می دهد. اگر هر دو عامل در عملگر تقسیم (/) صحیح باشند ، جاوا از تقسیم عدد صحیح استفاده می کند. اگر هر یک از عملوندها یک مقدار ممیزشناور باشد ، جاوا از تقسیم ممیزشناور استفاده می کند. با افزودن یک نقطه اعشاری و یک صفر می توانید از انجام تقسیم ممیزشناور اطمینان حاصل کنید:
class DivisionTypes {
  public static void main(String args[]) {
    System.out.println(18 / 5);
    System.out.println(18.0 / 5.0);
  }
}
اگر به مقدار باقیمانده پس از تقسیم عدد صحیح نیاز دارید ، می توانید از عملگر مدول (%) استفاده کنید:
class Modulus {
  public static void main(String args[]) {
    // Three cents left over after distributing
    // three pennies to each of my five nieces:
    System.out.println(18 % 5);
  }
}

اپراتورهای تبدیل نوع

بعضی اوقات ، ممکن است نیاز داشته باشید که جاوا یک نوع داده را به نوع دیگری تبدیل کند یا به صورت صریح نوع مورد استفاده را مشخص کنید. به عنوان مثال ، اگر دو متغیر int دارید و می خواهید آنها را تقسیم کنید تا یک عدد کسری بدست آورید ، ممکن است آن مقادیر را به مقادیر double تبدیل کنید. می توانید این کار را با تغییر نوع مقادیر که به آن typecasting یا به اختصار casting می گویند ، انجام دهید. یک عملگر cast با استفاده از قرار دادن نوع مورد نیاز داخل پرانتز و قبل از مقداری که باید تبدیل شود نوشته می شود. به عنوان مثال ، ۵ (double) مقدار ۵٫۰ را ارائه می دهد. در حال حاضر ، ما بیشتر بین انواع عددی cast خواهیم کرد. بر خلاف Javascript یا Python ، شما نمی توانید int یا double را به یک رشته یا از یک رشته به عدد تبدیل کنید ، بلکه باید از متد های خاصی که در کلاس String ، Integer یا Double است استفاده کنید.

تبدیل نوع به صورت ضمنی و صریح

گاهی اوقات ، جاوا به طور خودکار عمل تبدیل نوع (casting) را انجام می دهد. به عنوان مثال ، اگر تقسیمی به صورت ۱۸٫۰ / ۵ بنویسید ، جاوا تصمیم می گیرد که ۵ را به صورت ضمنی به عدد ممیز شناور ۵٫۰ ، تبدیل کند. مثال دیگر double x = 5 است. ۵ در سمت راست یک نوع داده عدد صحیح است ، اما جاوا می داند که باید آن را به double تبدیل کند. از طرف دیگر ، int x = 5.6 کار نمی کند. جاوا متوجه می شود که شما می خواهید یک عدد ممیزشناور را در متغیر int ذخیره کنید و به شما هشدار می دهد که این ممکن است باعث کاهش دقت شود. با استفاده از یک عملگر casting می توانید به صورت صریح به جاوا اطمینان دهید: int x = (int) 5.6. توجه داشته باشید که هنگام ذخیره یک عدد اعشاری در یک متغیر صحیح ، قسمت بعد از اعشاری حذف می شود ، ولی گرد نمی شود ، بنابراین این عبارت مقدار ۵ را در x ذخیره می کند و نه ۶٫

عملگرهای ترکیبی انتساب و محاسبه

مانند بسیاری از زبانهای دیگر ، جاوا اجازه می دهد تا محاسبات و انتساب با عملگرهای =+ ، =- ، =/ ، =* ترکیب شود. بنابراین ، x += 4 مقدار x را ۴ واحد افزایش می دهد.

عملگرهای افزایشی و کاهشی ++ و --

جاوا ، جاوااسکریپت ، C و ++C همه دارای عملگرهای افزایشی هستند که به شیوه ای یکسان کار می کنند. ولی پایتون چنین عملگری ندارد. عملگر ++ یک واحد به یک مقدار اضافه می کند و -- یک واحد کم می کند. این عملگرها در جاوا برای حلقه های for و while بسیار مفید هستند که به زودی و در جلسه های بعدی این مجموعه آموزشی شاهد آن خواهیم بود. از این عملگرها برای کوتاه سازی اپراتورهای انتساب ترکیبی استفاده می شود: شما می توانید تکه کد x += 1 را با کد کوتاه تر و ساده تر x++ جایگزین کنید.
class Increment {
  public static void main(String[] args) {
    int x;
    
    x = 5;
    x += 1;
    System.out.println("x = " + x);
    
    x++;
    System.out.println("x = " + x);
  }
}
دستورات انتساب متغیرها مانند x = 4 ، مقدار یک متغیر را تغییر می دهند. در C و Java ، این انتساب ها مقداری نیز تولید می کنند که می تواند مورد استفاده قرار گیرد. x = 4 مقدار ۴ را تولید می کند. بنابراین تکه کد y = (x = 4) در متغیر y عدد ۴ را ذخیره می کند. (در این عبارت به پرانتز نیازی نیست ، اما آنچه اتفاق می افتد را خواناتر می کند) به طور مشابه ، ++x (به محل قرار گیری ++ که سمت راست متغیر است توجه کنید) یک مقدار تولید می کند: مقدار x قبل از اضافه کردن ۱ به x. از آنجا که ابتدا مقدار نتیجه عبارت تولید می شود و سپس متغیر افزایش می یابد ، این عملگر post-increment یا پس افزا نامیده می شود. از طرف دیگر ، x++ (به محل قرار گیری ++ که سمت چپ متغیر است توجه کنید) ابتدا متغیر را افزایش می دهد و سپس مقدار نتیجه عبارت را تولید می کند. از این رو این عملگر pre-increment یا پیش افزا نامیده می شود. استفاده بیش از حد هوشمندانه و پیچیده از عملگرهای ++ و -- دلیل مشترک خطاهایی هستند که به سختی قابل کشف اند. من تقریبا همیشه ++x را روی یک خط به تنهایی می نویسم و هرگز از x++ استفاده نمی کنم چون با این کار کد خواناتر می شود. فقط به این دلیل که می توانید کدهای دشوار و غیرقابل فهمی مانند x + = (y-- - (x = 4)) را بنویسید به این معنی نیست که باید این کار را انجام دهید.
class Preincrement {
  public static void main(String[] args) {
    int x = 5;
    int y = 5;
 
    // The ++ operator changes the value 
    //  of the variable, but you can also
    //  use the result in an expression:
    
    System.out.println(x++);  // post-increment
    System.out.println(++y);  // pre-increment
    
    // assignment statements are also expressions.
    //  However, the code below is bad: it's too likely
    //  to be a typo; probably you wanted ==, the
    //  the equality comparison.
    System.out.println(x = y); 
    
    // Truly horrible programming style:
    System.out.println(x += (y-- - (x = 4) ));
  } 
}

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا