ה Zen של פייתון משקר

11/05/2017

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

בוויכוחים האינסופיים של פעם בין אוהדי פרל לתומכי פייתון לא פעם נשמע איזה פיתונאי מסביר שחייבים לבחור בפייתון כי שם הקוד יוצא יפה יותר, ואז הם שולפים לכם איזה משפט מה Zen של פייתון לפיו Beautiful is better than ugly כהוכחה. אז אתם הולכים לגגל את ה Zen של פייתון ונתקלים באוסף משפטים תמוהים שהקשר בינם לבין השפה מקרי בהחלט.

1. ה Zen עצמו

לטובת המתעצלים לחפש אלה המשפטים האלמותיים מאותו Zen של פייתון:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

2. חלקם פשוט נראים תמוהים

קחו את המשפט Beautiful is better than ugly מהכותרת. מי בדיוק לא יסכים אתו? איזה מתכנת פרל (או רובי, או אפילו Java) יחשוב שעדיף קוד מכוער על קוד יפה? אין כאלה.

אותו דבר עם Simple is better than complex. אי אפשר שלא להסכים עם המשפטים האלה ולכן הם חסרי משמעות.

3. חלקם לא מסתדרים עם השפה

ואז בהמשך אותו דיון דמיוני עם אנשי פייתון הם ישלפו לכם כמה משפטים שכן אומרים משהו, למשל את There should be one and preferably only one obvious way to do it.

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

>>>  list(map(lambda x: x * x, [1,2,3,4]))
[1, 4, 9, 16]

>>> list(x * x for x in [1,2,3,4])
[1, 4, 9, 16]

או שפשוט תלכו לקרוא את התיעוד של subprocess בפייתון3.

עוד משפט כזה הוא Explicit is better than implicit. נשמע טוב בהתחלה עד שנזכרים שיש המון קוד מובלע בפייתון, לא פחות מאשר בפרל או בשפות אחרות. העמסת אופרטורים לדוגמא זה פיצ'ר שלא היינו מצפים למצוא בשפה שמתנגדת ל Implicitness. הנה עוד דוגמא:

a = Critter()
b = Critter()
c = Critter()

d = a + b * c / 2
print(d)

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

4. ובכל זאת, ל Zen של פייתון יש ערך

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

ותודה ל DHH על ההשראה.