(برنامه نویسی JAVA) تبدیل غیر خودکار انواع ناسازگار
(conversions narrowing ) (رباتیک _ الکترونیک)
پژوهشگر و نویسنده: ( افشین رشید )
نکته: اگر چه تبدیلات خودکار انواع بسیار سودمند هستند ، اما جوابگوی همه نیازها نیستند . بعنوان مثال ، ممکن است بخواهیـد یـک مقـدار int را به یک متغیر byte نسبت دهید. این تبدیل بطور خودکار انجام نمی گیرد، زیرا یک byte از int ز کـوچکتر اسـت . ایـن نـوع خاص از تبدیلات را گاهی تبدیل باریک کننـده (conversions narrowing ) مـی نامنـد.
زیـرا بطـور صـریح مقـدار را آنقـدر باریک تر و کم عرض تر می کنید تا با نوع هدف سازگاری یابد . برای ایجاد یک تبدیل بین دو نوع ناسازگار ، بایـد از cast اسـتفاده نمایید cast . یک تبدیل نوع کاملا" صریح است .- target نوع و نوع مقصد یا هدف در اینجا نوع هدف ، همان نوعی است که مایلیم مقدار مشخص شده را به آن تبدیل کنیم . بعنوان مثال ، قطعه زیر از یک برنامه تبدیل غیر خودکار ازint به byte را اجرا می کند . اگر مقدار integer بزرگتراز دامنه یک byte باشد ، این مقدار به مدول( باقیمانده تقسیم یک integer بر دامنه (byte ) کاهش خواهد یافت
;a int .
byte b;
//...
b =( byte )a;
هر گاه که یک مقدار اعشاری به یک عدد صحیح نسبت داده شود ، شکل دیگری از تبدیل اتفاق می افتـد : بریـدن ، . truncation همانطوریکه می دانیـد ، اعـداد صـحیح دارای قسـمت اعشـاری نیسـتند . بنـابراین هنگامیکـه یـک مقـدار اعشـاری بـه یـک نـوع عـدد صحیح نسبت داده می شود ، جزی اعشاری از بین خواهد رفت ( بریده خواهد شد)
class Test {
public static void main(String[] args) {
// Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = (int)12.5f;
// String conversion (5.4) of i's int value:
System.out.println("(int)12.5f==" + i);
// Assignment conversion (5.2) of i's value to type
// float. This is a widening conversion (5.1.2):
float f = i;
// String conversion of f's float value:
System.out.println("after float widening: " + f);
// Numeric promotion (5.6) of i's value to type
// float. This is a binary numeric promotion.
// After promotion, the operation is float*float:
System.out.print(f);
f = f * i;
// Two string conversions of i and f:
System.out.println("*" + i + "==" + f);
// Invocation conversion (5.3) of f's value
// to type double, needed because the method Math.sin
// accepts only a double argument:
double d = Math.sin(f);
// Two string conversions of f and d:
System.out.println("Math.sin(" + f + ")==" + d);
}
}
( بعنوان مثال ، اگر مقدار 23.1 را بـه یـک عـدد صحیح نسبت دهـیم ، مقـدار حاصـله فقـط عـدد 1 مـی باشـد . مقـدار 23.0 بریـده (truncated) خواهـد شـد . البتـه اگـر انـدازه اجزای عدد کلی آنچنان بزرگ باشد که در نوع عدد صحیح مقصد نگنجد ، آنگاه مقدار فوق به مدول دامنه نوع هـدف کـاهش خواهـد یافت.
نویسنده: (افشین رشید )


