ערכתי לאחרונה בתאריך 05.07.05 בשעה 22:26 בברכה, bizho
מדריך לכל המתכנתים כאן שמעוניינים לכתוב קוד נקי יותר, נכון יותר ותקין יותר. כולכם ודאי מכירים את הספריה הסטנדרטית של ++C. הספריה, שנחתמה יחד עם התקן האחרון של ++C בשנת 2004 (לפני כן היה סטנדרט של שנת 1998) מספקת דרכים לעבוד עם מבני נתונים, קלט/פלט ועוד.
מחלקות רבות נכנסו לספריית המחלקות הסטנדרטית של ++ISO C. אתם בטח מכירים את iostream, string, vector וכו'.
הרעיון הוא שגישה אל המחלקות האלה יהיה תלוי בincludeים שאתם מבצעים.
עד חתימת התקן ב98, מתכנתי ++C השתמשו בצורה <include <iostream.h#, שבאה משפת C.
אבל כחלק מהסטנדרט, הוצג רעיון מרחב השמות - Namespacing. הרעיון אומר שניתן לעטוף חבילת מחלקות במרחב שמות מסויים, כדי להימנע מטעויות קומפילציה שנובעות משמות דומים של משתנים/מחלקות/שיטות (פונקציות) בהם התוכנית משתמשת. לדוגמא, אם יש לי class a וclass b, ובשתי המחלקות הגדרתי משתנה int c, כשאני כותב c = 50 במחלקה שמשתמשת בשתי המחלקות שהגדרתי, לאיזה c הקומפיילר יפנה?
בדיוק בשביל זה הומצא מרחב השמות. למי שמכיר Java - זהו הpackage.
כל הספריות הסטנדרטיות שהזכרתי מקודם הוכנסו למרחב השמות std. זה אומר שכדי להשתמש בפונקצייה cout, למשל, אני אעשה משהו כזה:
#include <iostream> int main() { std::cout << "bla"; }
|
הstd יחד עם אופרטור ה:: שבא לציין מיקום, אומר לקומפיילר "תחפש את השיטה cout בתוך הnamespace std.
כדי למנוע הקלדה מיותרת, יצרו את הפקודה using namespace, שאומרת לקומפיילר לחפש בתור ברירת מחדל במרחב השמות אותו ציינו לאחר ההוראה.
הקוד ממקודם, לאחר השימוש בהוראה החדשה, ייראה כך:
#include <iostream> using namespace std; int main() { cout << "bla"; }
|
אז נכון שפה אולי הוספנו תווים, אבל ככל שהתוכנית מתארכת - זה שווה יותר.
אפשר עדיין להתשמש בiostream.h. זה פשוט לא סטנדרטי ויכול להיות שביום מן הימים התמיכה הזאת של הקומפיילרים תבוטל, ואז קוד ישן פשוט לא יתקמפל.
Reference:
http://www.research.att.com/~bs/bs_faq2.html#simple-program - שאלה מתוך הFAQ של ממציא השפה, ביורן סטראוסרופ.
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html - אחד הספרים הטובים ביותר ללימוד ++C. הוא כתוב אמנם באנגלית, היא היא טכנית ופשוטה מאוד. יש שם הסבר על כל האספקטים ב++C, וכמובן על Namespacing.