"בהפוכה" קיבלה (פעם נוספת) בהפוכה והפעם ממאיר קריחלי 🙂
מאיר, מקצוען בכל רמ"ח אבריו, כתב את הסקריפט מחדש ופתר בעיות שונות (כולל פריסת מקלדת).
להל"ן המכתב שמאיר שלח לי (שמסביר את השינויים שהוא עשה):
"היי אילן,
כמו שכתבתי בתגובה, הסקריפט של בהפוכה היה די בעייתי לטעמי. בעיות שמצאתי
ודרכים לשיפור:
– בדיקות מיותרות אם המחרוזת עברית או אנגלית, אפשר פשוט לשים במילון אחד
את כל העסק (מעברית לאנגלית ולהיפך) ולעבור ללא צורך בבדיקה.
– פועל יוצא הוא שהקוד לא יכל לטפל במחרוזות מעורבות (גם עברית וגם אנגלית)
במקרה שאדם הקליד עם הפריסה הלא נכונה (אנגלית במקום עברית) החליף פריסה
כאשר רצה לעבור לשפה השניה (שעדיין לא נכונה – עברית במקום אנגלית)
– אין צורך בחזרה על אותיות גדולות במילון ההמרה, מיותר, פשוט להריץ lower
על היוניקוד ואז להמיר עם המילון שלנו.
– אין צורך בלולאה או list comprehension, מחרוזות ויוניקוד מכילות method
בשם translate שבהינתן המילון עם ה-ord המתאים יבצע את ההמרה.
– שינוי לוח המקשים הוא מתכון לאסון (תתי פריסות, כמו lyx אצלי, יותר
מפריסה אחת וכד')
– אין למשתמש אפשרויות שליטה (מה אם רוצים שייכתב ל-stdout במקום
ל-clipboard, לדוגמא בתור filter ל-vim וכד'), מה אם לא רוצים לבצע paste
אלא רק שישב ב-clipboard ? עם אפשרויות כאלה, ניתן לדוגמא למפות מקשים
שונים לתכונות שונות
– הכל כתוב בבלוק הראשי, כך שאי אפשר לבצע:
לדוגמא, מה שמונע שימוש חוזר בקוד או בטבלת
ההמרה לכאלה שחפצים בכך.
– קשה לקרוא את הקוד עקב המילונים הארוכים וקוד מיותר
הסקריפט שמצורף, מטפל בכל אלה לדעתי בצורה הבאה:
– משתי מחרוזות פשוטות (שדי קריאות וניתן לראות בקלות מה מומר מאחר ויושבות
אחת מעל השניה) מרכיבים את טבלת ההמרה.
– טבלת ההמרה היא כפולה (אנגלית->עברית + עברית->אנגלית), כך שאין צורך
בבדיקת שפת המחרוזת ופועל יוצא ניתן לטפל במחרוזות מעורבות.
– לפני ההמרה קוראים ל-lower כך שאין צורך באותיות גדולות בטבלת ההמרה
– במקום לשנות פריסות מקשים ולהסתבך עם צירופים, פשוט שמים את ההמרה
ב-clipboard ושולחים CTRL+V (לבצע paste).
– קוד הועבר לפונקציות והקוד הראשי מורץ רק במקרה של __main__ (מה שלא
יתבצע במקרה של import).
– פועל יוצא של השינויים הנ"ל הוא שהקוד קצר וקריא יותר
– נוספו אופציות לסקריפט. אפשר לראותן בעזרת העברת הפרמטר -h, לדוגמא
(מקווה שכיווניות לא תחרבש את זה):
הגרסה מצורפת להודעה זו (מקווה שלא איכפת לך שהוספתי את שמי למחברים). אשמח להערות והארות."
מאיר: ברור שלא איכפת לי ששמך מופיע ברשימת המחברים. האמת היא שאם נעשה diff בין מה שאני ומשה כתבנו ובין מה שאתה כתבת נקבל שרק שתי השורות הראשונות זהות:
אז השאלה שצריכה להישאל היא "האם לא איכפת לך ששמנו מופיע בסקריפט…" 🙂
הורדה, הערות ותלונות כאן