קריא למי שמבין

20/10/2019

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

print''.join(list(open('../fd/0'))[1:])[-26:]

השורה פשוט לא נכתבה בשביל שיבינו אותה. היו שם מטרות אחרות.

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

(rows == good_line).all(axis=1).any()

ואולי עדיף לכתוב לולאה במקום. ההבדל הגדול בין שתי השורות - במקרה הראשון קריאות לא היתה המטרה, ולכן גם אם אתם מכירים טוב אם print, list ו open עדיין יהיה קשה להבין מה קורה שם. במקרה השני הקוד קריא למי שמבין. אם אתם מכירים טוב את numpy ובפרט את הפונקציות all ו any שלו, לא תהיה לכם שום בעיה להבין מה השורה עושה. סיכוי טוב שזה יהיה אפילו יותר ברור מאשר הלולאה המקבילה.

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