Menu
Coddy logo textTech

מתודות ושדות סטטיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 20 מתוך 110.

עכשיו, כשאתה מבין את ההבדל בין איברי מופע לאיברים סטטיים, נבחן כיצד להשתמש במתודות ובשדות סטטיים ביעילות. איברים סטטיים מתאימים במיוחד לפונקציונליות ששייכת למושג המחלקה עצמו ולא לאובייקטים בודדים.

שדות סטטיים מאחסנים נתונים המשותפים לכל המופעים. שימושים נפוצים כוללים מונים, ערכי תצורה או נתונים שנשמרו במטמון:

class MathHelper {
  static const double pi = 3.14159;
  static int calculationCount = 0;
  
  static double circleArea(double radius) {
    calculationCount++;
    return pi * radius * radius;
  }
}

print(MathHelper.circleArea(5));  // 78.53975
print(MathHelper.circleArea(3));  // 28.27431
print(MathHelper.calculationCount);  // 2

שימו לב שאתם קוראים למתודות סטטיות ישירות בשם המחלקה, ולא על מופע. המחלקה MathHelper פועלת כמו כלי עזר — אין צורך ליצור אובייקט מסוג MathHelper.

כלל חשוב: מתודות סטטיות אינן יכולות לגשת ישירות לחברים של מופע. אין להן גישה אל this כי הן אינן קשורות לאובייקט מסוים:

class Counter {
  int value = 0;  // שדה של מופע
  static int total = 0;  // שדה סטטי
  
  void increment() {
    value++;  // תקין - מתודה של מופע ניגשת לשדה של מופע
    total++;  // תקין - מתודה של מופע יכולה לגשת לשדה סטטי
  }
  
  static void reset() {
    total = 0;  // תקין - מתודה סטטית ניגשת לשדה סטטי
    // value = 0;  // שגיאה! אי אפשר לגשת לשדה של מופע
  }
}

השתמש באיברים סטטיים כשהפונקציונליות אינה תלויה במצב האובייקט — פונקציות עזר, מעקב אחר מפעלים או קבועים משותפים הם מועמדים מתאימים.

challenge icon

אתגר

קל

בואו נבנה מחלקת עזר לפעולות על מחרוזות, שמדגימה כיצד מתודות ושדות סטטיים פועלים יחד כדי לספק פונקציונליות שימושית בלי צורך ליצור אובייקטים.

תיצרו שני קבצים כדי לארגן את הקוד שלכם:

  • string_utils.dart: הגדירו מחלקה בשם StringUtils שתשמש כמחלקת עזר. המחלקה צריכה לכלול:
    • static const String defaultSeparator שערכו '-'
    • static int operationCount שמתחיל בערך 0 כדי לעקוב אחר מספר הפעולות שבוצעו
    • מתודה סטטית reverse(String text) שמגדילה את operationCount ומחזירה את המחרוזת בסדר הפוך
    • מתודה סטטית join(String first, String second) שמגדילה את operationCount ומחזירה את שתי המחרוזות מחוברות באמצעות defaultSeparator
    • מתודה סטטית countVowels(String text) שמגדילה את operationCount ומחזירה את מספר התנועות (a, e, i, o, u - ללא תלות באותיות גדולות או קטנות)
    • מתודה סטטית getStats() שמחזירה מחרוזת המציגה את מספר הפעולות הכולל שבוצעו
  • main.dart: ייבאו את מחלקת העזר והשתמשו במתודות הסטטיות שלה:
    • קראו ל־reverse() עם 'hello' והדפיסו את התוצאה
    • קראו ל־join() עם 'dart' ועם 'lang' והדפיסו את התוצאה
    • קראו ל־countVowels() עם 'Programming' והדפיסו Vowels: [count]
    • הדפיסו את הנתונים הסטטיסטיים באמצעות getStats()

זכרו לקרוא לכל המתודות ישירות באמצעות שם המחלקה, מכיוון שהן סטטיות — לא תיצרו אובייקטים של StringUtils.

המתודה getStats() צריכה להחזיר את התוצאה בפורמט הבא:

Operations performed: [operationCount]

פלט צפוי:

olleh
dart-lang
Vowels: 3
Operations performed: 3

נסו בעצמכם

import 'string_utils.dart';

void main() {
  // TODO: קראו ל-reverse() עם 'hello' והדפיסו את התוצאה
  
  // TODO: קראו ל-join() עם 'dart' ו-'lang' והדפיסו את התוצאה
  
  // TODO: קראו ל-countVowels() עם 'Programming' והדפיסו "Vowels: [count]"
  
  // TODO: הדפיסו את הנתונים הסטטיסטיים באמצעות getStats()
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Dart אונליין