Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الدوال الساكنة

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 16 من 87.

تماماً كما تنتمي المتغيرات الساكنة (static variables) إلى الفئة (class) بدلاً من الكائنات (instances)، فإن الأساليب الساكنة (static methods) تنتمي أيضاً إلى الفئة نفسها. يمكنك استدعاؤها دون إنشاء كائن (object).

قم بالتصريح عن دالة ثابتة (static method) بإضافة الكلمة المفتاحية static:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static int multiply(int a, int b) {
        return a * b;
    }
}

// استدعاء بدون إنشاء كائن
int sum = MathHelper.add(5, 3);      // 8
int product = MathHelper.multiply(4, 2);  // 8

للطرق الساكنة (Static methods) قيد واحد مهم: فهي لا يمكنها الوصول إلى متغيرات الكائنات (instance variables) أو طرق الكائنات (instance methods) بشكل مباشر. وبما أن الطرق الساكنة توجد بدون كائن، فلا يوجد مرجع this للعمل معه.

public class Counter {
    private int count;              // متغير كائن (Instance variable)
    private static int total;       // متغير ساكن (Static variable)
    
    public static void incrementTotal() {
        total++;      // صحيح - الوصول إلى متغير ساكن
        // count++;   // خطأ! لا يمكن الوصول إلى متغير كائن
    }
}

تعد الطرق الساكنة (Static methods) مثالية للعمليات المساعدة التي لا تعتمد على حالة الكائن - فكر في طرق مثل Math.sqrt() أو Integer.parseInt(). فهي توفر وظائف تكون منطقية على مستوى الفئة بدلاً من الكائنات الفردية.

challenge icon

التحدي

سهل

لنقم ببناء فئة أدوات مساعدة StringUtils توفر طرقاً مفيدة لمعالجة النصوص دون الحاجة إلى إنشاء أي كائنات - وهي مثالية لاستعراض الطرق الساكنة (static methods)!

ستقوم بإنشاء ملفين لتنظيم الكود الخاص بك:

  • StringUtils.java: أنشئ فئة أدوات مساعدة تحتوي على طرق ساكنة (static methods) تؤدي عمليات نصية شائعة:
    • طريقة ساكنة countVowels(String text) تعيد عدد الحروف المتحركة (a, e, i, o, u - سواء كانت كبيرة أو صغيرة) في النص المعطى.
    • طريقة ساكنة reverse(String text) تعيد النص معكوساً.
    • طريقة ساكنة isPalindrome(String text) تعيد true إذا كان النص يُقرأ بنفس الطريقة من الأمام والخلف (غير حساس لحالة الأحرف)، و false خلاف ذلك.
  • Main.java: استخدم فئة الأدوات المساعدة الخاصة بك لمعالجة نص. ستتلقى مدخلاً واحداً: سلسلة نصية. استدعِ كل طريقة ساكنة مباشرة من خلال اسم الفئة واطبع ثلاثة أسطر:
    • Vowels: [count]
    • Reversed: [reversed string]
    • Palindrome: true أو Palindrome: false

ستتلقى مدخلاً واحداً: سلسلة نصية لتحليلها.

تذكر أن الطرق الساكنة (static methods) يتم استدعاؤها باستخدام اسم الفئة (مثل StringUtils.countVowels(text)) بدلاً من إنشاء كائن أولاً. وهذا يجعل فئات الأدوات المساعدة مريحة للعمليات التي لا تحتاج إلى الحفاظ على أي حالة بين الاستدعاءات.

ورقة مرجعية

تنتمي الأساليب الثابتة (Static methods) إلى الفئة نفسها ويمكن استدعاؤها دون إنشاء كائن. قم بالتصريح عنها باستخدام الكلمة المفتاحية static:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
}

// استدعاء دون إنشاء كائن
int sum = MathHelper.add(5, 3);  // 8

قيد هام: لا يمكن للأساليب الثابتة الوصول إلى متغيرات النسخة (instance variables) أو أساليب النسخة (instance methods) مباشرة، لأنها توجد بدون كائن وليس لها مرجع this:

public class Counter {
    private int count;              // متغير نسخة
    private static int total;       // متغير ثابت
    
    public static void incrementTotal() {
        total++;      // صحيح - الوصول إلى متغير ثابت
        // count++;   // خطأ! لا يمكن الوصول إلى متغير نسخة
    }
}

تعتبر الأساليب الثابتة مثالية لعمليات الأدوات المساعدة التي لا تعتمد على حالة الكائن، مثل Math.sqrt() أو Integer.parseInt().

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        
        // TODO: استخدم أساليب StringUtils الثابتة لتحليل النص
        // استدعِ StringUtils.countVowels(text) للحصول على عدد الحروف المتحركة
        // استدعِ StringUtils.reverse(text) للحصول على النص معكوساً
        // استدعِ StringUtils.isPalindrome(text) للتحقق مما إذا كان النص متناظراً
        
        // TODO: اطبع النتائج بالتنسيق التالي:
        // Vowels: [count]
        // Reversed: [reversed string]
        // Palindrome: true/false
        
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming