18-02-2014, 23:36
|
|
|
|
חבר מתאריך: 14.12.09
הודעות: 9,751
|
|
ציטוט:
במקור נכתב על ידי שימי
אני לא צופה שמי שלא מכיר את השפה יבין את משמעות החץ (והאמת היא שאין לו הרבה משמעות, למעט ... ויזואליות - ש בכל איטרציה של foreach אז איבר מן המערך הופך ל: מפתח => הערך של המפתח הזה במערך. אגב, גם בהגדרה של מערך, ניתן להשתמש באופרטור הזה באותה הצורה כדי לשייך ערך למפתח כלשהו...) - אלא מה סביר שהקוד עושה, פשוט מהקריאה.
|
לא, זה לא ברור.
דווקא ההשמה באמצעות חץ היא תחביר ברור ומוכר (מפרל, למשל).
מערך = {"מפתח" => "ערך", "עוד מפתח" => "עוד ערך"}
זה ברור.
מה קשור החץ בלולאה זה לא ברור. באופן מעניין, גם פרל וגם הרבה שפות אחרות בחרו בתחביר הברור בסגנון:
for (key, value) in dict/hash/map {
do something with a pair of key and value
}
בפרל זו הפונקציה each, בפייתון וב-C# אתה מקבל מפתח וערך אם אתה אומר שאתה רוצה זוג in ה-dict (ורק את הערך אם אתה אומר משתנה בודד in ה-dict).
כמובן שבכלל לא מדובר במערך, אלא ב-map או ב-dictionary. לפעמים הדבר הזה נקרא "מערך אסוציאטיבי", אבל מי שלא יודע מה זה למבדה גם לא ידע מה זה מערך אסוציאטיבי.
ציטוט:
במקור נכתב על ידי שימי
אם אתה חושב שזה יותר ברור:
קוד:
range(len(a)), key=lambda i: a[i]
או בתרגום: טווח (בעל מספר אחד, שהוא האורך של a, שזה קצת מוזר, טווח זה בד"כ בין a ל b, לא?)
|
וברור שהקצה התחתון של הטווח הוא אפס. זה ברור לכולם חוץ מלמתכנתי Visual Basic שבעולם המוזר שלהם אפשר להגדיר מערכים בסגנון Dim arr(5 To 12, 16 To 43) As String. אפילו אצלם ברור שאם לא מצוין טווח תחתון הוא 0 או 1. כי ברור לכולם שאם אומרים "לך תביא לי עוד 5 כוסות קפה" לא שואלים "חח רגע מאיפה מתחילים לספור חח?!!"
ציטוט:
במקור נכתב על ידי שימי
מפתח שווה ל lambda i שהוא בעצם a[i] (אז למה אי אפשר בעצם לציין ישר key=a[i] ?)...
|
כי הוא לא רוצה שיבצעו evaluation של a[i] ברגע הקריאה ל-sorted ויעבירו לה את התוצאה של זה, אלא הוא רוצה שיעבירו ל-sorted פונקציה (שמקבלת משתנה ומחזירה את הערך ב-a שיושב תחת המפתח שמתואר בארגומנט של הפונקציה). לא שבכלל יש משתנה בשם i בשלב הזה שאפשר לכתוב key=a[i]...
ציטוט:
במקור נכתב על ידי שימי
ולכל מה שכתבתי בפיסקה הקודמת יש משמעות, בייחוד למי שלא ראה lambda מימיו... והמשמעות הזו יותר ברורה מ"עבור כל מה שיש ב a קח את המפתח ואת הערך שלו", אז אני לא אתווכח...
והטענה שלי היא שמבין כל הדברים המוצגים כאן, דווקא ל lambda יש את הסבירות הכי גבוהה להיות לא מובן (ואם אתה מבין את זה, יש סיכוי לא רע שזה בגלל שאתה כבר יודע את זה, ואילו אני מתייחס לקהל שאין לו רקע בתכנות וקורא משהו שהכי קרוב לאנגלית שאפשר...)
|
כל מי שיודע C++ או C# או Haskell או LISP יודע מה זה למבדה (ההוא שיודע האסקל גם יודע מה המקור של השם). מה קשור החץ? רק מתכנתי PHP יודעים.
_____________________________________
(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס
אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
|