פוסטים

מציג פוסטים מתאריך אוקטובר, 2020

מחשבות על coupling ועל dependency injection

תמונה
אם הייתי צריך לבחור עקרון אחד לכתיבת קוד טוב וללכת איתו, זה היה לכתוב קוד שהוא loosely coupled. הפוסט הבא מדבר על החשיבות של כתיבת קוד בצימודיות נמוכה ועל איך הזרקת תלויות יכולה לעזור לנו עם הנושא. מה זה couplingמשמעות המילה coupling בעברית היא צימודיות והכוונה כשמדברים על צימודיות היא על כמה חזקה התלות בין מימושים בקוד.במילים אחרות - ככל שכמות השינויים והתסבוכות שאכנס אליהם כשאצטרך לעשות שינוי או להוסיף שכבת אבסטרקציה תגדל - כך הצימודיות תהיה גבוהה יותר.
coupled code vs decoupled codeהעיפו מבט בקטע הקוד הבא ונסו לחשוב אילו השפעות יכולות להיות לו על פיתוח התוכנה בעתיד

עכשיו דמיינו את המקרה הבא (והניחו שבניית מחשבים היה דבר פשוט שמסתכם בכתיבת מספר מחלקות וחיבורן יחד): כתבתי את המחלקה Computer, הפצתי אותה למגוון גדול של משתמשים וכולם יכולים ליצור מופע של המחשב שלי ולהינות מיכולות העיבוד המופלאות של Intel.
לאחר כמה חודשים הגיעה לאוזני השמועה שיש מעבד חדש בשם AMD. כעת אני רוצה שכל מי שירצה יוכל להחליף את המעבד שלו ולבחור אם ברצונו להשתמש ב AMD או ב Intel. אבל יצרתי בעיה.
כשהכנסתי את היצירה של Int…

מה זה singleton ולמה לא כדאי להשתמש בו?

תמונה
זהו פוסט קצר שמטרתו להציג את תבנית העיצוב singleton ומדוע אינני ממליץ להשתמש בה. הפוסט הינו חלק מסדרה שמטרתה לדבר על כתיבת קוד רע ו-anti-patterns בתחום עיצוב התוכנה.
מה זה סינגלטוןסינגלטון היא תבנית עיצוב ממשפחת ה creational, שמטרתה להגביל את יצירת המופעים של מחלקה מסוימת למופע יחיד, משתמשים בתבנית הזו על מנת שלא ליצור התנגשות בין אובייקטים בפעולות כמו כתיבה לזכרון, קובץ דאטאבייס וכו׳.

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

באופן הזה נקרא כל פעם למופע המחלקה באמצעות הפונקציה get_instance ונקבל את אותו המופע.
למה לא להשתמש בוסינגלטון היא תבנית פשוטה מאוד, אבל האמת היא שאין מתנות חינם.
הנה 4 סיבות (מהקלה לחמורה) לכך שאני חושב שלא כדאי להשתמש בסינגלטון:
בזבזנות בזיכרון שימוש בסינגלטון הוא אינו יעיל בהיבטי זיכרון כשמדובר על סביבות בהן יש garbage collector. במקרים בהם משתמשים בסינגלטון בשפות כאלו (כמו java ופייתון), השפה מגדירה את האובייקט כחשוב (מכיוון שיש אליו רפרנס סטטי) ול…

מה חדש בפייתון 3.9

תמונה
בשבוע שעבר שוחררה גרסת פייתון 3.9 והיא כרגיל מביאה עמה כל מיני דברים מעניינים.כשמשתחררת גרסה של פייתון, בדרך כלל ה release notes מחולקים לנושאים כמו:
syntax features, built-in features, new features in the standard library, Interpreter improvements, and new library modules. מטרת הפוסט היא לכלול כמה מהדברים שאני מצאתי מעניינים ושיוכלו להעיל לי בחיי היומיום כמפתח.שימו לב: בגרסה 3.9 החבר׳ה של פייתון לקחו צעדים רציניים נוספים בהורדת התמיכה ובתאימות לאחור אל מול פייתון 2.7. בעבר פיצ׳רים פותחו עם תאימות מסוימת לאחור אבל מגרסה לגרסה הפיצ׳רים תואמים פחות ואף יורדת תאימות בפיצ׳רים ישנים. זאת ניתן לראות לפי Deprecation Warnings על גבי ספריות ישנות. אם אינכם בטוחים באילו פיצ׳רים אתם משתמשים שאינם נתמכים עוד, השתמשו במדריך הזה על מנת לבדוק זאת.
הפיצ׳רים החדשיםאופרטורים למיזוג ועדכון dictionariesאחד הדברים שאני הכי אוהב בגרסאות חדשות של שפה זה תוספות ל-syntax. באמצעות הפיצ׳ר החדש הזה נוכל בקלות לעדכן ולמזג מילונים.
אם עד כה היינו משתמשים בפונקציה dict.update וב {d2,**d1**} על מנת לעדכן ולמזג באופן הזה:…