إضافة عمليات جديدة

حتى الآن كنا نستعمل العمليات المبنية مسبقاً في مكتبات Java، لكن يمكننا أيضاً أن نضيف عمليات جديدة. في الواقع، لقد رأينا سابقاً تعريف إحدى العمليات: main. العملية المسماة main مميزة لأنها تشير إلى مكان بدء تنفيذ البرنامج، لكن البنية المستخدمة في main هي نفس المستخدمة في العمليات الأخرى:
كود:
public static void NAME( LIST OF PARAMETERS ) {
STATEMENTS
}
يمكنك استخدام أي اسم تريده لعمليتك، عدا أنك لا تستطيع تسميتها main أو أي كلمة أخرى محجوزة في Java. اصطلاحاً، تبدأ أسماء العمليات في Java بأحرف صغيرة وتستخدم "حروف الجمل – camel caps"، وهو اسم طريف يعني كتابة الحرف الأول من الكلمات المتلاصقة بشكله الكبير، كما نقوم عندما jamWordsTogetherLikeThis.
قائمة المعاملات تحدد ماهية المعلومات، في حال وجودها، التي يتوجب عليك توفيرها حتى تستعمل (أو تستدعي (invoke)) التابع الجديد.
المعامل الوحيد للعملية main هو String[] args، الذي يشير إلى أنه يجب على كل من يستدعي main أن يوفر مصفوفة من السلاسل المحرفية (سنصل إلى المصفوفات في الفصل 10). العمليتان اللتان سنكتبهما في البداية ليس لهما أية معاملات، لذا فإن بنيتها ستبدو مثل هذه:
كود:
public static void newLine() {
   System.out.println("");
}
هذه العملية اسمها newLine، والأقواس الفارغة تبين أنها لا تأخذ أية معاملات. وهي تتضمن تعليمة واحدة فقط، تقوم بطباعة سلسلة فارغة (empty String)، أشرنا إليها بالعلامتين "". إن طباعة سلسلة محرفية لا تحوي أية حروف قد يبدو غير مفيد على الإطلاق، إلا إذا تذكرت أن تعليمة println تنقل مؤشر الطباعة إلى السطر التالي بعد الانتهاء من الطباعة، إذن فهذه التعليمة تؤدي إلى تجاوز سطر واحد ونقل مؤشر الطباعة إلى السطر التالي.
داخل main يمكننا استدعاء هذه العملية الجديدة باستعمال طريقة مشابهة للطريقة المستخدمة عند استدعاء أوامر Java الجاهزة:
كود:
public static void main(String[] args) {
   System.out.println("First line.");
   newLine();
   System.out.println("Second line.");
}
إن خرج البرنامج هو
First line.

Second line.
لاحظ المسافة الإضافية بين السطرين. ماذا لو أردنا المزيد من المساحة بين السطرين؟ يمكننا استدعاء العملية نفسها عدة مرات:
كود:
public static void main(String[] args) {
   System.out.println("First line.");
   newLine();
   newLine();
   newLine();
   System.out.println("Second line.");
}
أو يمكننا كتابة عملية جديدة، اسمها threeLine، تقوم بطباعة ثلاثة أسطر:
كود:
public static void threeLine() {
newLine(); newLine(); newLine();
}
public static void main(String[] args) {
System.out.println("First line.");
threeLine();
System.out.println("Second line.");
}
يجب أن تنتبه لعدة أشياء في هذا البرنامج:
· يمكنك استدعاء نفس العملية عدة مرات. في الواقع، هذا الشيء شائع جداً ومفيد.
· يمكنك كتابة عملية تستدعي عملية أخرى. في هذه الحالة، main تستدعي threeLine و threeLine تستدعي newLine. أيضاً فإن هذا الشيء شائع ومفيد.
· في threeLine كتبت التعليمات الثلاثة كلها على سطر واحد، وذلك صحيح لغوياً (تذكر أن المسافات والأسطر الجديدة لا تغير معنى البرنامج عادة). من جهة أخرى، من الأفضل وضع كل تعليمة في سطر لوحدها في العادة، وذلك لتجعل برنامجك أسهل للقراءة. أنا أحياناً أتجاوز هذه القاعدة.
حتى الآن، قد لا يبدو سبب كل هذا العناء في كتابة هذه العمليات الجديدة واضحاً. في الواقع، هناك العديد من الأسباب، لكن هذا المثال يشرح اثنين فقط:
1. إنشاء عملية جديدة يعطيك القدرة على إعطاء اسم لمجموعة من التعليمات. يمكن للعمليات أن تبسط البرنامج بإخفاء حسابات معقدة وراء أمر واحد، وباستعمال الكلمات الإنكليزية بدلاً من الشفرة الغامضة. أيهما أوضح، newLine أو System.out.println("") ؟
2. إنشاء عملية جديدة يمكن جعل البرنامج أصغر بالتخلص من الشفرة المكررة. مثلاً، كيف يمكنك طباعة تسعة أسطر جديدة متعاقبة؟ يمكنك استدعاء threeLine ثلاثة مرات.
في القسم 7.7 سنعود إلى هذا السؤال وسأسرد المزيد من فوائد تقسيم البرامج إلى عمليات.