בתשובה להאייל האלמוני, 14/01/10 13:45
חלוקות של מספר 533274
תוציא את המקל מישבנך, ותן לאחרים להנות. אתה לא חייב לקרוא את כל התגובות, ועולמי התרבותי התרחב כפליים מתגובתו של גדי מאשר מתגובתך.
חלוקות של מספר 533279
עוד תשעה כמוך ויש לנו מניין ראשון.

למתעניינים בנושאים קרובים:

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);
}

}

}

חלוקות של מספר 533289
אבל למה בשפה כל כך מכוערת, למה?

להשוואה:

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

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

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));
}
אם אי אפשר.
חלוקות של מספר 533297
רובי היא אולי שפה יעילה, אולי שפה נוחה, אולי שפה מהירה.. אבל היא אחת מהמכוערות ביותר שראיתי (אם שופטים את יופי השפה לפי יופי הקוד). אין ספק שאם אתה קורא ל-Java מכוערת, אתה צריך לחשוב פעמיים לפני שאתה משתמש ברובי.
חלוקות של מספר 533299
וואו, אני כל כך לא מסכים.
חלוקות של מספר 533303
Math.Abs(a)‎

לעומת:

a.abs

מה שכן, מתחרה פוטנציאלית אחת של רובי בכלל לא מועמדת כאן מסיבות טכניות - פייתון.
חלוקות של מספר 533307
שתיהן מכוערות (לדעתי), אבל הרובי מכוערת יותר.
abs(a)
היה הרבה יותר יפה וברור.

אין בעיה לכתוב בג'אווה מחלקה שתכיל מספר ומתודה שתתן את הערך המוחלט שלו ותראה דומה לרובי עד כדי סוגריים (שרק מייפים את העסק). אבל, בסופו של יום, אני רוצה את הערך המוחלט של a, ולא a ערך מוחלט של, לכן אני מעדיף לראות את הפונקציה לפני הערך (ושים לב שככה כותבים גם באנגלית וגם במתמטיקה). זה אינטואיטיבי יותר, קריא יותר ויפה יותר.
חלוקות של מספר 533309
מן הסתם
abs(a)
הוא משהו שאפשר לעשות גם ברובי, אבל כשמתחילים לעשות דברים טיפה יותר מורכבים זה מפסיק להיות קריא. אם אתה רוצה להתחיל לשרשר עכשיו פונקציות, הדרך הנכונה לעשות את זה היא ללכת משמאל לימין, במקום לפתוח עוד ועוד ועוד סוגריים (אפילו שבמתמטיקה זה מה שעושים) או לפצל לשמונה שורות שונות. אולי צריך קצת זמן כדי להסתגל לזה, אבל אני לא חושב שזה מכוער.

אגב, אחת הסיבות המרכזיות שאני מעדיף את רובי על פייתון היא שבפייתון אין אחידות בקטע הזה - למשל, בשביל אורך של רשימה צריך להשתמש בפונקציה החיצונית len במקום במתודה של הרשימה (כמובן, העובדה שזו סיבה מרכזית בהעדפה שלי רק מראה עד כמה השפות הללו דומות ב"יופי" שלהן).
חלוקות של מספר 533313
אז, מה הופך את הרובי ליפה יותר מג'אווה וסי++?
חלוקות של מספר 533312
הגישה של ג'אווה במקרה הזה היא שהמספר אינו אובייקט. בניגוד לרוב שאר הדברים.

מצד שני, במקרים רבים אומרים וכותבים "נצא מהפונקציה אם קיבלנו משהו קטן מדי" ולא "אם קיבלנו משהו קטן מדי, נצא מהפונקציה."
return if (a<b) ‎

ולא:
if (a<b) {
return
}

יש (לפחות) שפה אחת שבה יש את abs(a)‎ וגם התחביר האמור של if (וגם unless, למקרה הצורך) - פרל. שפה שנוצרה ע"ׁי בלשן שחושב שצריכים לכתוב קוד כמו שמדברים.

(טוב, אז אולי כותבי פרל מקללים מדי פעם)
חלוקות של מספר 533314
ממש לא מדוייק, ג'אווה היא שפה גמישה שמאפשרת לך לייצר מספרים בתור אובייקטים.

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

ועוד טוען שככה מסבירים דברים למחשבים?

אולי בשבילך המציאו את http://en.wikipedia.org/wiki/CouchDB
חלוקות של מספר 533320
אורך המשפט באמת לא משנה. תחשוב מתי, ביומיום, אתה מקדים את התנאי לתוצאה שלו, ומתי אתה מקדים את התוצאה לתנאי.
חלוקות של מספר 533315
(טוב, אז אולי כותבי פרל מקללים מדי פעם)

מי ש*באמת* מקלל זה מי שצריך *לקרוא* פרל. (הכרתי אפילו מישהו שבסוף פשוט הרכיב מגבים על המסך)
חלוקות של מספר 533342
כנראה שהיופי, כמו עדשות המגע, הוא בעיני המתבונן. בעיני פרל מאוד קריאה. אם מדובר בקטע קוד מכוער במיוחד, יש דרכים לסדר אותו מחדש.
perl -MO=Deparse ugly-script.pl
המהדרין יכולים גם להתקין
perltidy

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

אני מסכים שהיופי הוא אכן בעיני המתבונן.

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

העקרון "יש יותר מדרך אחת לעשות זאת" נשמעת מושך ומזמין יצירתיות, ממש כמו העקרון של היידיש "יש יותר מדרך אחת לומר זאת".

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

אבל אולי לא כל מה שטוב לבדיחות טוב גם לשפות תכנות: ריבוי האידיומים באמת מאפשר הבעה יותר עשירה, אבל למע"ד לא תומך בּקְרִיאוּת.

אם נחזור ליידיש, יש בה פתגם ציורי שאומר שאיש איש נהנה מריח נפיחותיו הוא, ואולי זה מסביר גם את הקונפליקט הקטן שלנו.
חלוקות של מספר 533348
I should have known it better with a guy like you
חלוקות של מספר 533465
היופי הוא בעיני המתבונן:
#v&<     @.$<
:<\g05%p05:_^#

חזרה לעמוד הראשי המאמר המלא

מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים