January 03, 2006

namespacing

הנה תעלול חדש. השימוש ב-namespacing נובע בעיקר מהצורך לאגד members של מחלקות תחת "קורת-קוד" אחת, ובכך למעשה להפריד שמות members זהים אשר מחזיקים פעולות או ערכים שונים.
אם תרצו, namespacing עבור members הם המקבילה של packages עבור מחלקות. היתרון בא לידי ביטוי כאשר יש לנו למשל שתי פונקציות בעלות אותו השם תחת אותה המחלקה, המבצעות פעולות שונות. לו לא היינו משתמשים ב-namespacing היינו צריכים לקרא להן בשם שונה, אך לא עוד.
בכדי להמחיש את הנושא, הנה דוגמה קלה:



package {
// Importing classes
import flash.display.*
import flash.util.*;
/**
/* Class: NameSpacingExample
/* Desc:
*/
public class NameSpacingExample {
// Define 2 namespaces
namespace Matti;
namespace Chuck;

public function NameSpacingExample () {
// Call the functions
Matti::traceMyNamespace ();
Chuck::traceMyNamespace ();
}
// asign the same function NAME to
// each namespace.
Matti function traceMyNamespace ():Void {
trace("Matti")
}
Chuck function traceMyNamespace ():Void {
trace("Chuck")
}
}
}


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



use Matti;
traceMyNamespace ();
use Chuck;
traceMyNamespace ();


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

1 comment:

anx said...

תודה על ההסבר הזה. עשה קצת סדר בראש שלי.