(برنامه نویسی 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) خواهـد شـد . البتـه اگـر انـدازه اجزای عدد کلی آنچنان بزرگ باشد که در نوع عدد صحیح مقصد نگنجد ، آنگاه مقدار فوق به مدول دامنه نوع هـدف کـاهش خواهـد یافت.
نویسنده: (افشین رشید )