WPML

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

מהו תכנות פונקציונלי?

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

קודם כל, תכנות פונקציונלי הוא פרדיגמת תכנות שבה הדגש הוא על שימוש בפונקציות כדי לבנות תוכנה, וחיבור פונקציות יחד כדי לבנות פונקציות מורכבות יותר. תכנות פונקציונלי הופך את הקוד לדקלרטיבי יותר מטבעו. אתה מביע את מה שאתה רוצה במקום לכתוב רצף של פקודות שמעדכנות את מצב התוכנית.

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

בפשטות, בתכנות פונקציונלי הפלט תלוי בקלט.

מדוע תכנות פונקציונלי?

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

ביצוע Unit testing לקוד OOP יכול לקחת אותך רק עד גבול מסוים. צריך ליצור mock לתלויות קוד כדי שיהיה אפשר לבדוק מחלקות באופן עצמאי. כתוצאה מכך, הבדיקות הופכות בסופו של דבר לגדולות ומורכבות.

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

מה עשינו

כאשר אנו מדברים על תכנות פונקציונלי, PHP אינה השפה הראשונה שעולה לראש – למרות שהיא כן מאפשרת לנו להציג סגנון פונקציונלי. לדוגמה, הוקים ופילטרים שמאפשרים להרחיב את WordPress משתמשים בפונקציות כדי לעקוף פונקציונליות של WordPress.

למרבה הצער, אין ספרייה סטנדרטית לשימוש בפרדיגמה פונקציונלית יותר ב־PHP. סקרנו ספריות רבות אך לאף אחת מהן לא היה בדיוק את מה שהיינו צריכים כדי לכתוב קוד אקספרסיבי בסגנון פונקציונלי. לכן במקום זאת, החלטנו לכתוב ספרייה משלנו. שאבנו השראה ממקורות שונים, אך רבים מהם מספריות Javascript, שמצאנו שהן בוגרות יותר.

לתכנות פונקציונלי יש גישה שונה מפרדיגמות אחרות, כך שהמעבר לפרדיגמת תכנות פונקציונלי הוא למעשה צעד גדול. הוא דורש ממך לשנות את האופן שבו אתה חושב על כתיבת קוד ופתרון בעיות. נדרש תרגול רב כדי לכתוב קוד אקספרסיבי שהוא ברור ותמציתי.

האם זה עבד?

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

  • מבנה הקוד טוב יותר
  • הקוד אקספרסיבי ותמציתי יותר
  • כפילות קוד מופחתת
  • הפונקציות קטנות יותר ולכן קל יותר לבדוק אותן ולהשתמש בהן שוב
  • ניתן לחבר פונקציות יחד
  • פחות שימוש ב־mock בבדיקות
  • פותחו ספריות mock לשימוש חוזר

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

  • קשה יותר לבצע דיבוג
  • קשה יותר לערוך בו שינויים – למרות שזה יכול להיחשב גם כיתרון, מכיוון שזה דורש ממך לשקול שינויים במקום להכניס שינויים מהירים
  • עקומת הלמידה תלולה

אל תפחד לנסות

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

אם אתה מעוניין ללמוד עוד, אנו ממליצים להתחיל עם סדרת הפוסטים בבלוג Composing Software.

ברגע שאתה מוכן לצלול עמוק יותר, כדאי להעיף מבט במאגר פרויקט ה־FP שלנו.

אתה חי ונושם קוד? הצטרף אלינו.

אנחנו תמיד מחפשים מפתחים יוצאי דופן שיצטרפו לצוות שלנו. אם זה נשמע כמוך, אל תחכה יותר – הגש מועמדות עוד היום.

מצאת את זה שימושי? שתף מאמר זה: