static تعني أن المتغير (أو الدالة) ينتمي للكلاس وليس للكائن.
مثالي لمشاركة البيانات بين الكائنات.
يوفر ذاكرة ويمنع التكرار.
لا يُستخدم فيه this.
يمكن الوصول إليه مباشرة باستخدام اسم الكلاس.
✅ أولاً: ما هي الدالة الثابتة static method؟
هي دالة تابعة للكلاس نفسه، وليست تابعة لأي كائن (object) منه.
أي يمكننا استدعاؤها بدون إنشاء كائن من الكلاس، لأنها لا تعتمد على البيانات الخاصة بأي كائن (لا تستخدم this).
✅ الشكل العام:
classClassName {static returnType methodName(parameters) {// تنفيذ الدالة }}
Dart
✅ مثال بسيط:
classMathHelper {staticintsquare(int number) {return number * number; }}voidmain() {int result =MathHelper.square(5);print(result); // 25}
Dart
✅ شرح المثال:
أنشأنا كلاس اسمه MathHelper.
داخله دالة square() تم تعريفها باستخدام static.
قمنا باستدعاء الدالة مباشرة من الكلاس: MathHelper.square(5) بدون إنشاء كائن.
النتيجة هي 25 لأن 5 × 5 = 25.
✅ ملاحظات مهمة:
ملاحظة
شرح
❌ لا تستخدم this
لأن الدالة لا تعمل على كائن بل على الكلاس مباشرة.
✅ يمكن استخدامها بدون new أو إنشاء كائن
فقط باسم الكلاس.
❌ لا تصل للخصائص غير static
الدالة static لا يمكنها الوصول للمتغيرات أو الدوال العادية داخل الكلاس.
✅ مثال متقدم أكثر: آلة حاسبة
classCalculator {staticdoubleadd(double a, double b) => a + b;staticdoublesubtract(double a, double b) => a - b;staticdoublemultiply(double a, double b) => a * b;staticdoubledivide(double a, double b) {if (b ==0) {print("لا يمكن القسمة على صفر");return0; }return a / b; }}voidmain() {print(Calculator.add(10, 5)); // 15print(Calculator.subtract(10, 5)); // 5print(Calculator.multiply(10, 5)); // 50print(Calculator.divide(10, 0)); // لا يمكن القسمة على صفر → 0}
Dart
✅ لماذا استخدمنا static هنا؟
لأن هذه العمليات لا تعتمد على بيانات داخل الكلاس، فهي مجرد وظائف عامة، وليس هناك حاجة لإنشاء كائن لتنفيذها.