أهلاً! أنت بالفعل على دراية جيدة بالأنواع البدائية، وعملت معها كثيرًا. في البرمجة (وجافا على وجه الخصوص)، تتمتع البدائيات بالعديد من المزايا: فهي تستخدم القليل من الذاكرة (وبالتالي تجعل البرنامج أكثر كفاءة) ولها نطاق محدد بوضوح من القيم. ومع ذلك، أثناء تعلم Java، كثيرًا ما كررنا الشعار "كل شيء في Java عبارة عن كائن". لكن البدائيين يتعارضون بشكل مباشر مع تلك الكلمات. إنهم ليسوا كائنات. إذًا، هل مبدأ "كل شيء هو كائن" خاطئ؟ في الواقع، ليس كذلك. في Java، كل نوع بدائي له أخ توأم، وهو فئة مجمعة.
ما هي فئة المجمع؟
الغلاف عبارة عن فئة خاصة تخزن البدائية داخليًا. ولكن نظرًا لأنها فئة، يمكنك إنشاء مثيلات لها. إنها تخزن القيم الأولية داخليًا، لكنها لا تزال كائنات حقيقية. أسماء الفئات المجمعة تشبه إلى حد كبير (أو تتطابق تمامًا مع) أسماء العناصر الأولية المقابلة لها. لذلك، فهي سهلة التذكر.
فئات المجمع لأنواع البيانات البدائية |
أنواع البيانات البدائية |
فئات المجمع |
كثافة العمليات |
عدد صحيح |
قصير |
قصير |
طويل |
طويل |
بايت |
بايت |
يطفو |
يطفو |
مزدوج |
مزدوج |
شار |
شخصية |
منطقية |
منطقية |
يتم إنشاء كائنات الغلاف بنفس طريقة إنشاء أي كائن آخر:
public static void main(String[] args) {
Integer i = new Integer(682);
Double d = new Double(2.33);
Boolean b = new Boolean(false);
}
تتيح لنا فئات الغلاف التخفيف من عيوب الأنواع البدائية. الأكثر وضوحًا هو أن البدائيين ليس لديهم طرق. على سبيل المثال، ليس لديهم طريقة
toString() ، لذا لا يمكنك، على سبيل المثال، تحويل
int إلى
String . لكن فئة المجمع
Integer تجعل هذا الأمر سهلاً.
public static void main(String[] args) {
Integer i = new Integer(432);
String s = i.toString();
}
ومع ذلك، قد يكون التحويل في الاتجاه الآخر أكثر صعوبة. لنفترض أن لدينا
سلسلة نصية ، والتي نعرف بالتأكيد أنها تحتوي على رقم. بغض النظر، لا توجد طريقة أصلية لاستخدام
int البدائي لاستخراج الرقم من
السلسلة وتحويله إلى رقم. ولكن يمكننا ذلك مع الطبقات المجمعة.
public static void main(String[] args) {
String s = "1166628";
Integer i = Integer.parseInt(s);
System.out.println(i);
}
انتاج:
1166628
لقد نجحنا في استخراج رقم من
السلسلة وتخصيصه للمتغير المرجعي
Integer i . بالمناسبة، فيما يتعلق بالمراجع. أنت تعلم بالفعل أن الوسائط يتم تمريرها إلى الأساليب بطرق مختلفة: الأوليات حسب القيمة، والكائنات حسب المرجع. يمكنك استخدام هذه المعرفة عند إنشاء الأساليب الخاصة بك: على سبيل المثال، إذا كانت طريقتك تستخدم أرقامًا كسرية ولكنك تحتاج إلى منطق لتمريرها حسب المرجع، فيمكنك تمرير وسيطات
Double /
Float إلى الطريقة بدلاً من
double /
float . بالإضافة إلى أساليب الفئات المجمعة، يمكن أيضًا أن تكون حقولها الثابتة مريحة جدًا. على سبيل المثال، تخيل أن لديك المهمة التالية: عرض الحد الأقصى لقيمة
int الممكنة ، متبوعة بأقل قيمة ممكنة. تبدو هذه المشكلة أساسية إلى حد ما. لكن بدون جوجل، من غير المرجح أن تتمكن من القيام بذلك. لكن الأغلفة تسمح لك بالتعامل بسهولة مع مثل هذه "المهام الدنيوية":
public class Main {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
تمنعك هذه المجالات من تشتيت انتباهك عن إنجاز مهام أكثر جدية. ناهيك عن حقيقة أن الكتابة
2147483647 (والتي تصادف أنها قيمة MAX_VALUE) ليست بالأمر الهين! :) علاوة على ذلك، أشرنا في درس سابق إلى أن الكائنات المجمعة غير قابلة للتغيير.
public static void main(String[] args) {
Integer a = new Integer(0);
Integer b = new Integer(0);
b = a;
a = 1;
System.out.println(b);
}
انتاج:
0
لم تتغير حالة الكائن المشار إليها في الأصل بـ
a (لأن قيمة
b كانت ستتغير أيضًا). كما هو الحال مع
String s، بدلاً من تغيير حالة كائن الغلاف، يتم إنشاء كائن جديد تمامًا في الذاكرة. إذًا، لماذا قرر مبتكرو Java في النهاية ترك الأنواع البدائية في اللغة؟ نظرًا لأن كل شيء يجب أن يكون كائنًا، ولدينا فئات مجمعة يمكنها التعبير عن كل ما تعبر عنه الأساسيات، فلماذا لا نحتفظ فقط بالأغلفة في اللغة ونزيل الأوليات؟ الجواب بسيط: الأداء. تسمى الأنواع البدائية بالبدائية لأنها تفتقر إلى العديد من ميزات الأشياء "ثقيلة الوزن". نعم، تحتوي الكائنات على العديد من الطرق الملائمة، لكنك لا تحتاج إليها دائمًا. في بعض الأحيان، كل ما تحتاجه هو الرقم 33، أو 2.62، أو
صحيح /
خطأ . في المواقف التي لا تهم فيها مزايا الكائنات ولا تكون مطلوبة لكي يعمل البرنامج، تكون البدائيات أكثر ملاءمة للمهمة.
GO TO FULL VERSION