|
||||
|
||||
עוד תשעה כמוך ויש לנו מניין ראשון. למתעניינים בנושאים קרובים: public class GCD {
public static int gcd(int m, int n) { if (m < n) { int t = m; m = n; n = t; } int r = m % n; if (r == 0) { return n; } else { return gcd(n, r); } } } |
|
||||
|
||||
אבל למה בשפה כל כך מכוערת, למה? להשוואה: def gcd(a,b) (שים לב שאצלי מטפלים גם במספרים שליליים, בעוד שאצלך זה יגרום ככל הנראה לקריסת התוכנית).
a,b = a.abs, b.abs a,b = b,a if a<b return a if b == 0 return gcd(b, a % b) end |
|
||||
|
||||
סליחה אבל הכיעור הוא במימוש ולא בשפה, (כנראה בשני המקרים) אין צורך לבדוק למי יש יותר גדול ולהצריח - תוצאה נכונה תתקבל בכל מקרה. int gcd(int a, int b) { אם אפשר להניח ששניהם אי-שליליים, אוreturn (b == 0) ? a : gcd(b, a % b); } int gcd_abs(int a, int b) { אם אי אפשר.
return gcd(Math.Abs(a), Math.Abs(b)); } |
|
||||
|
||||
רובי היא אולי שפה יעילה, אולי שפה נוחה, אולי שפה מהירה.. אבל היא אחת מהמכוערות ביותר שראיתי (אם שופטים את יופי השפה לפי יופי הקוד). אין ספק שאם אתה קורא ל-Java מכוערת, אתה צריך לחשוב פעמיים לפני שאתה משתמש ברובי. |
|
||||
|
||||
וואו, אני כל כך לא מסכים. |
|
||||
|
||||
Math.Abs(a) לעומת:a.abs מה שכן, מתחרה פוטנציאלית אחת של רובי בכלל לא מועמדת כאן מסיבות טכניות - פייתון.
|
|
||||
|
||||
שתיהן מכוערות (לדעתי), אבל הרובי מכוערת יותר. abs(a) היה הרבה יותר יפה וברור.אין בעיה לכתוב בג'אווה מחלקה שתכיל מספר ומתודה שתתן את הערך המוחלט שלו ותראה דומה לרובי עד כדי סוגריים (שרק מייפים את העסק). אבל, בסופו של יום, אני רוצה את הערך המוחלט של a, ולא a ערך מוחלט של, לכן אני מעדיף לראות את הפונקציה לפני הערך (ושים לב שככה כותבים גם באנגלית וגם במתמטיקה). זה אינטואיטיבי יותר, קריא יותר ויפה יותר. |
|
||||
|
||||
מן הסתם abs(a) הוא משהו שאפשר לעשות גם ברובי, אבל כשמתחילים לעשות דברים טיפה יותר מורכבים זה מפסיק להיות קריא. אם אתה רוצה להתחיל לשרשר עכשיו פונקציות, הדרך הנכונה לעשות את זה היא ללכת משמאל לימין, במקום לפתוח עוד ועוד ועוד סוגריים (אפילו שבמתמטיקה זה מה שעושים) או לפצל לשמונה שורות שונות. אולי צריך קצת זמן כדי להסתגל לזה, אבל אני לא חושב שזה מכוער.אגב, אחת הסיבות המרכזיות שאני מעדיף את רובי על פייתון היא שבפייתון אין אחידות בקטע הזה - למשל, בשביל אורך של רשימה צריך להשתמש בפונקציה החיצונית len במקום במתודה של הרשימה (כמובן, העובדה שזו סיבה מרכזית בהעדפה שלי רק מראה עד כמה השפות הללו דומות ב"יופי" שלהן). |
|
||||
|
||||
אז, מה הופך את הרובי ליפה יותר מג'אווה וסי++? |
|
||||
|
||||
הגישה של ג'אווה במקרה הזה היא שהמספר אינו אובייקט. בניגוד לרוב שאר הדברים. מצד שני, במקרים רבים אומרים וכותבים "נצא מהפונקציה אם קיבלנו משהו קטן מדי" ולא "אם קיבלנו משהו קטן מדי, נצא מהפונקציה." return if (a<b) ולא:if (a<b) { יש (לפחות) שפה אחת שבה יש את abs(a) וגם התחביר האמור של if (וגם unless, למקרה הצורך) - פרל. שפה שנוצרה ע"ׁי בלשן שחושב שצריכים לכתוב קוד כמו שמדברים.return } (טוב, אז אולי כותבי פרל מקללים מדי פעם) |
|
||||
|
||||
ממש לא מדוייק, ג'אווה היא שפה גמישה שמאפשרת לך לייצר מספרים בתור אובייקטים. ברוב המקרים אומרים וחושבים (טוב, לפחות אני אומר וחושב) ככה: "מחר נעשה יום כיף, נלך לגן החיות, נאכיל את האריות, נטפס על הזברות, נאכול ארנבים, אם נהיה עייפים נחזור הביתה, אחרת נמשיך לפילים, לנמרים, לסוסים ובסוף היום נאכל גלידה אצל סבא וסבתא" ולא "מחר נעשה יום כיף, נלך לגן החיות, נאכיל את האריות, נטפס על הזברות, נאכול ארנבים, נחזור הביתה אם נהיה עייפים, נמשיך לפילים, לנמרים, לסוסים ובסוף היום נאכל גלידה אצל סבא וסבתא אחרת". שזה כמו בכל ספה נורמלית, כמו שאתה מסביר לילד מה יקרה מחר, ככה אתה מסביר למחשב מה לעשות, בסדר שבו הוא, המחשב, אמור לעשות אותו. |
|
||||
|
||||
תוכניתן חושב במשפטים כאלו ארוכים ומורכבים? ועוד טוען שככה מסבירים דברים למחשבים? אולי בשבילך המציאו את http://en.wikipedia.org/wiki/CouchDB |
|
||||
|
||||
אורך המשפט באמת לא משנה. תחשוב מתי, ביומיום, אתה מקדים את התנאי לתוצאה שלו, ומתי אתה מקדים את התוצאה לתנאי. |
|
||||
|
||||
(טוב, אז אולי כותבי פרל מקללים מדי פעם) מי ש*באמת* מקלל זה מי שצריך *לקרוא* פרל. (הכרתי אפילו מישהו שבסוף פשוט הרכיב מגבים על המסך) |
|
||||
|
||||
כנראה שהיופי, כמו עדשות המגע, הוא בעיני המתבונן. בעיני פרל מאוד קריאה. אם מדובר בקטע קוד מכוער במיוחד, יש דרכים לסדר אותו מחדש. perl -MO=Deparse ugly-script.pl המהדרין יכולים גם להתקין perltidy הוויכוח הזה מזכיר לי מאמר בשם "מה רע בפרל ולמה פיתון טובה יותר" (או משהו כזה, קראתי אותו ממש מזמן). המאמר הציג כדוגמא לאי הקריאות של פרל קטע קוד שנלקח מהספריה הסטנדרטית שלה. קטע הקוד המושמץ הזה היה עבורי הדבר הכי קריא במאמר.
|
|
||||
|
||||
נשמע בדיוק כמו יוסי ע. אחד שהכרתי פעם. אני מסכים שהיופי הוא אכן בעיני המתבונן. הסטראוטיפ שעובד בשבילי אומר שאכן פייתון קריא בהרבה מפרל. העקרון "יש יותר מדרך אחת לעשות זאת" נשמעת מושך ומזמין יצירתיות, ממש כמו העקרון של היידיש "יש יותר מדרך אחת לומר זאת". בילדותי, התירוץ האולטימטיבי לכל בדיחה שלא הצחיקה היה "ביידיש זה הרבה יותר מצחיק". כשבגרתי מעט ניסיתי פעם ללמוד יידיש ואני יכול להעיד שזה באמת נשמע מצחיק יותר ביידיש. אבל אולי לא כל מה שטוב לבדיחות טוב גם לשפות תכנות: ריבוי האידיומים באמת מאפשר הבעה יותר עשירה, אבל למע"ד לא תומך בּקְרִיאוּת. אם נחזור ליידיש, יש בה פתגם ציורי שאומר שאיש איש נהנה מריח נפיחותיו הוא, ואולי זה מסביר גם את הקונפליקט הקטן שלנו. |
|
||||
|
||||
I should have known it better with a guy like you
|
|
||||
|
||||
היופי הוא בעיני המתבונן: #v&< @.$<
:<\g05%p05:_^# |
חזרה לעמוד הראשי | המאמר המלא |
מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים | |
RSS מאמרים | כתבו למערכת | אודות האתר | טרם התעדכנת | ארכיון | חיפוש | עזרה | תנאי שימוש | © כל הזכויות שמורות |