دورة جافا: الطريق لإحتراف البرمجة من الصفر

 

 ما الجديد في جافا 7

منذ 2006 لم تظهر أي نسخة جديدة للغة البرمجة جافا، وفي سنة 2011، وبالضبط في 28.06.2011 تم الانتهاء من جافا 7. بالأساس تم فقط تطوير ما احتوته جافا 6.

في هذا الدرس سنرى بإذن الله التحسينات التي طرأت على جافا 6 وكذلك ما أتت به جافا 7 كجديد.java news

لا يمكن أن نحيط بجميع التعديلات التي طرأت، لكن سنحاول أن نتطرق لأهم ما جاء في هذا الباب.

 

1. Project Coin

وهي عبارة عن مجموعة من التسهيلات للغة البرمجة جافا، تقوم بتوفير الوقت على المطور وكذلك الكود، سنرى فيها :

1.1 Generics

2.1 إمكانيات جديدة لتمثيل الأعداد

3.1 try-with-resources

4.1 Multi-catch

5.1 تعبير Switch بسلسلة من الحروف Strings

 

1.1 Generics

إن اردنا تعريف متغير age بنوع بيانات مرجعية ArrayList في جافا 6، فسنقوم بذلك كما في المثال التالي :

import java.util.*;
public class Generics {
    
    public static void main(String[] args) {
        
        List<Integer> age = new ArrayList<Integer>();
    }
}

هنا قمنا بتعريف متغير بنوع بيانات List على اليسار، وقمنا بعد ذلك بإنشاء الكائن الخاص به على اليمين بالأمر new.

كما ترون فلقد عرفنا  age، وكتبنا integer مرتين! ( لاحظ هنا أن integer يجب أن تكتب بحرف I كبير )، المرة الأولى على اليسار والمرة التانية على اليمين! هذه الخاصية موجودة من النسخة الخامسة لجافا.

نقوم هنا بكتابة integer حتى عند إنشاء الكائن ( new ArrayList )، وذلك لنقول للمترجم أنه يجب عليه حفظ فقط كل ما هو عبارة عن integer وليس شيء أخر.

إذاً هنا تضاف integer عند إعلان المتغير وكذلك عند إنشاء الكائن ( object ).

 

في جافا 7 يكفي فقط إضافة integer عند إعلان المتغير، ما يسمى Diamond Operator، هكذا :

import java.util.*;
public class Generics {
    
    public static void main(String[] args) {
        
        List<Integer> age = new ArrayList<>();
    }
}

هذه الطريقة هي صالحة حتى بتعريف List لأكثر من نوع بيانات واحد.

 

2.1 إمكانيات جديدة لتمثيل الأعداد

رأينا في درس أنواع البيانات والمتغيرات في فقرة : أنواع البيانات الجوهرية ( البدئية ) : Primitive Types أن مساحة الكرة الأرضية : 510066000 كم مريع.

كما ترون فإن هذا العدد كبير لقراءته! وغير واضح، لذلك أدمجت في جافا 7 تحسينات لتوضيح هذه الأعداد، فمثلاً عدد 510066000، يمكن الأن كتابته في جافا 7 على الشكل التالي :

public class Numbers {
    public static void main(String[] args) {
        int EarSurface = 510_066_000;
    }
}

الأن أصبح واضح كم يساوي العدد. هذا التحسين يمكن تطبيقه على الأعداد العشرية أيضاً.

 

تحسين أخر طرأ على الجافا 7 هو أنها الأن تقبل الأعداد بنظام العد الثنائي ( binary )، كمثال :

public class Numbers {
public static void main(String[] args) {
int bits = 0b101_10;
}
}

الشرط الوحيد هو كتابة 0b قبل كتابة العدد بنظام العد الثنائي. كما يمكن إضافة شرطات على العدد أيضاً، كما مبين في المثال أعلاه

 

3.1 try-with-resources

قبل جافا 7 كان يجب عليك إغلاق Try with ب-fiinally، هكذا :

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TryWithResources {
 
    public void testTryWithResourcesStatement() throws FileNotFoundException, IOException{
 
        FileInputStream in = null;
        try {
            in = new FileInputStream("java7.txt");
            System.out.println(in.read());
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }
}

مع صدور جافا 7، أصبح من السهل تعريف جمل Try With، حيث أن جافا 7 تتكفل بإغلاق جملة Try With أوتوماتيكياً، وكتابة كود أقل يقوم بنفس عمل الكود السابق :

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TryWithRessources {
 
    public void testTryWithResourcesStatement() throws FileNotFoundException, IOException{
 
        try (FileInputStream in = new FileInputStream("java7.txt")) {
            System.out.println(in.read());
        }
    }
}

4.1 Multi-catch

لحد جافا 6، يمكنك إستعمال catch واحد في كل Try، وإن أردت استعمال كاتش أخر يجب عليك أن تعرف Try أخرى. إلى أن جاءت جافا 7 لتحل هذا المشكل وتعطي إمكانية إستعمال أكثر من Catch واحدة في ال-Try.

try {
    // Something
}
catch (IOException e) {
}
catch (SomethingException e) {
}
catch (Exception e) {
}
....

 

5.1 تعبير Switch بسلسلة من الحروف Strings

أحد أهم الأشياء التي كانت مفقودة في لغة الجافا هي تعبير Switch بسلسلة من الحروف Strings ( كلمات )، وذلك رغم أن هذه الخاصية تتوفر في عديد من لغات البرمجة الأخرى.

سابقاً كانت ال-switch منحصرة فقط على أعداد أو الحروف و إن كنت تريد برمجة تعابير if لسلسلات من الحروف(strings)، يجب عليك القيام بذلك عبر التعبير if و-else-if، مما يؤدي لكود غير واضح تماماً.

الأن وبمساعدة switch يمكن ذلك ولتوضيح ذلك أكثر نأخد المثال التالي : نقوم بإنشاء كلاس نسميها person، بها متغير إسمه name.

وكلاس نسميها StringIF، هذه الأخيرة هي التي ستحتوي على الكلاس الرئيسية :

public class StringIF {
    /**
     * @author Ayoub El Hobbi
     * @version 04.04.2012
     */
 
    public void main(String[] args) {
 
        if (person.name.equals("Ayoub")) {
            System.out.println("hello Ayoub!");
        } else if (person.name.equals("Mohamed")) {
            System.out.println("hello Mohamed!");
        } else {
            System.out.println("Hello Mjma3!");
        }
    }
}

إن قمنا الأن ببرمجة نفس الكود بتعبير السويتش، سنحصل على الكود التالي :

public class StringSwitch {
    /**
     * @author Ayoub El Hobbi
     * @version 04.04.2012
     */
    public void main(String[] args) {
        switch (person.name) {
        case "Ayoub":
            System.out.println("Hello Ayoub!");
            break;
        case "Mohamed":
            System.out.println("Hello Mohamed!");
            break;
        default:
            System.out.println("Hello Mjma3!");
        }
    }
}

 

لغة جافا لم تأتي بهذه التعديلات والخصائص فقط بل شملت أيضاً قراءة سطر الإدخال والتعامل مع الملفات، وكذلك تعامل أحسن وأشمل للأعداد، حيث تم دمج كتابة الأعداد بالعد الثنائي : Binary .