כשחברת Oracle Corporation הציעה כמה מבני פונקציות ב-Java SE 8, כיום רוב הראיונות מתעניינים בשאלות בנושא תכנות פונקציונלי. כמפתח Java/Groovy/Scala או כל מפתח תכנות פונקציונלי אחר, חשוב ללמוד את השאלות והתשובות הבאות כדי להצליח בראיונות:
- מהו תכנות פונקציונלי?
- מהם היתרונות והחסרונות של תכנות פונקציונלי?
- מהם ההבדלים בין תכנות פונקציונלי לבין תכנות פרוצדורלי?
- מהם ההבדלים בין תכנות פונקציונלי לבין תכנות מונחה עצמים?
- מהם ההבדלים בין תכנות פונקציונלי, תכנות פרוצדורלי ותכנות מונחה עצמים?
- מהם היתרונות העיקריים של תכנות פונקציונלי מעל תכנות פרוצדורלי או תכנות מונחה עצמים?
- מתי להשתמש בתכנות פונקציונלי?
- מתי להשתמש בתכנות מונחה עצמים?
- מהם החסרונות של תכנות מונחה עצמים?
- מהם החסרונות של תכנות מונחה עצמים בנוגע לירושה?
… ועוד
בפוסט הזה, אנחנו הולכים לדון בשלושת פרדיגמות התכנות הפופולריות הבאות אחת אחרי השנייה וגם לענות על השאלות מעלה:
- תכנות פונקציונלי (FP)
- תכנות פרוצדורלי (IP)
- תכנות מונחה עצמים (OOP)
מה זה תכנות פונקציונלי?
במילים פשוטות, התכנות הפונקציונלי (FP) הוא אחד מפרדיגמות התכנות הפופולריות, שבהן נעשה חישובים כמו פונקציות מתמטיות בלי שינוי מצב ובלי הפקת נתונים. בתכנות פונקציונלי, הפונקציות הן מועמדות ראשונות. אנו כותבים תוכניות על ידי הגדרת קבוצה של פונקציות ונתונים לא-נעוצים. דוגמאות לשפות FP:- סקאלה, הסקל, ארלנג ועוד הן שפות FP פופולריות. ב-Java SE 8 גם קיימים קונסטרוקטים פונקציונליים (יש לעיין בפוסטים על Java 8 לפרטים נוספים)
מהן תכונות ה-FP?
שפות תכנות פונקציונליות כמו סקאלה מציגות את התכונות הבאות:
- 1. המדינה לא קיימת.
2. חשיבות נמוכה של סדר ביצוע
בשפות תכנות פונקציונליות, אנו כותבים תוכניות עם אוסף של פונקציות עצמאיות. פונקציות מכילות אוסף של פעולות. בתכנות פונקציונלי, סדר הביצוע של אותן פונקציות אינו משמעותי כי הן אינן מכילות מצב וכל הפונקציות עובדות באופן עצמאי. גם אם נשנה את סדר הביצוע, הן תכין את אותם תוצאות.
3. דגם תכנות ללא מצב
כל תוכניות ה-FP משתמשות בנתונים לא משתנים ובפונקציות שאינן יכולות לשנות את הנתונים הללו. זה אומר ששפות ה-FP תומכות בדגם התכנות ללא מצב.
4. פונקציות הן אזרחים מעמד ראשון
בשפות תכנות פונקציונליות, הפונקציות הן אובייקטים מעמד ראשון. הפונקציות הן יחידות עצמאיות, ניתן להפעיל אותן בכל סדר.
5. יחידות עיבוד ראשיות
בשפות תכנות פונקציונליות, יחידות העיבוד העיקריות הן פונקציות ומבני נתונים מאחר וכל התוכניות נבנות באמצעות שימוש ביחידות אלו.
6. תכנות מודולרי
בשפות תכנות פונקציונליות, אנו צריכים לכתוב יחידות קטנות ועצמאיות, שנקראות פונקציות טהורות, כדי לתמוך בדגם התכנות ללא מצב. זה אומר ש-FP תומך במודולריות טובה יותר מ- OOP.
7. פונקציות מסדר גבוה והערכה עצלה
שפות התכנות הפונקציונליות צריכות לתמוך בפונקציות מסדר גבוה ובתכונת הערכה עצלה.
8. בקרת זרימה ראשית
שפות התכנות הפונקציונליות אינן משתמשות בבקרות זרימה כמו לולאת For…Loop, Do…While Loop, While…Loop וכן אינן משתמשות בהצהרות תנאי כמו If…Else או בהצהרות Switch. כל שפות התכנות הפונקציונליות כותבות תוכניות באמצעות הדברים הבאים:
- פונקציות
- קריאות לפונקציות
- קריאות לפונקציות עם רקורסיה
- התרסות, הצפנה, התייחסות ופולימורפיזם
כמו ב-OOP, שפות פונקציונליות תומכות בכל 4 המושגים: התרסות, הצפנה, התייחסות ופולימורפיזם. שפות פונקציונליות תומכות בהתייחסות עם מחלקות סוג או כללים. הן תומכות בפולימורפיזם בעזרת גנריקים. ידוע גם כפולימורפיזם פרמטרי.
מהו המוקד הראשי של FP?
שפות תכנות פונקציונליות דומות ל-OOP מתמקדות בעיקר ב-"מה אתה עושה" או "מה יש לעשות". הן מתמקדות במידע הנדרש, שהוא קלט.
- איזה מידע נדרש, כלומר קלטים.
- אילו שינויים נדרשים, כלומר הלוגיקה האמיתית.
כלומר, FP מתמקדת בעיקר ב-"מה יש לעשות". היא לא מתמקדת הרבה ב-"איך יש לעשות את זה". זה אומר שאנו יכולים לכתוב קוד פונקציונלי כמו תיאור של תחום הבעיה. לכן, לא רק מפתחים אלא גם אנשים אחרים יכולים להבין את קוד ה-FP בקלות. כעת נדבר על "יתרונות וחסרונות" (יתרונות וחסרונות) של תכנות פונקציונלי.
יתרונות של תכנות פונקציונלי?
שפות תכנות פונקציונליות מציעות את היתרונות או התועלות הבאות:
- קוד ללא באגים
כפי ששפות התכנות הפונקציונליות אינן תומכות במצב, הן אינן גוררות שגיאות צדדיות, מה שאומר שאנו יכולים לכתוב קוד ללא שגיאות או קוד ללא באגים או קוד פחות קשור לשגיאות.- תכנות מקבילי יעיל
כיוון ששפות התכנות הפונקציונליות אין להן מצב נע, הן אינן גוררות בעיות שינוי מצב. זה אומר שהן משתמשות רק בנתונים ללא שינוי. הן משתמשות ביחידות עצמאיות לכתיבת תוכניות, שהן "פונקציות". אנו יכולים לכתוב תכנות מקבילי או קונקורנטי מאוד יעיל כי הן רצות באופן עצמאי בלי לשנות את המצב.- ביצועים טובים יותר
כיוון שתוכניות ה- FP מרכיבות יחידות עצמאיות, הן יכולות לרוץ באופן מקבילי או קונקורנטי. עקב סיבה זו, יישומי FP מרוויחים ביצועים טובים יותר.- אנקפסולציה טובה יותר
בניגוד ל- OOP, FP תומך באנקפסולציה טובה יותר עם פונקציות טהורות. פונקציות טהורות אומרות בלי שיפועים.- תמיכה בפונקציות מקוננות
פונקציות מקוננות אומרות ליצור פונקציות בתוך פונקציות אחרות כדי לפתור בעיות. FP תומך בפונקציות מקוננות.- הגברת הניתנות לשימוש מחדש
כיוון שתוכניות FP מורכבות מיחידות עצמאיות שהן "פונקציות", אנו יכולים להשתמש בהם מחדש בקלות רבה.- אפשרות ריכוז טובה יותר
בשפות FP, עלינו לכתוב יחידות קטנות ועצמאיות, בשם פונקציות טהורות כדי לתמוך במודל התכנות ללא מצב. זה אומר ש- FP תומך בריכוז טוב יותר מאשר OOP.- הערכה עצלה קלה
בשפות FP, זה מאוד קל לכתוב הערכה עצלה. הן תומכות במבני פונקציות עצלים כמו רשימות עצלות, מפות עצלות וכו '.- הגברת הנגישות והניתנות לתחזוקה
התכנות הפונקציונלי (FP) משפר גם את הנגישות והניתנות לתחזוקה מאחר שהן עובדות באופן עצמאי ואינן משנות מצב.- הגברת הבדיקה
כאשר אנו כותבים את התכניות שלנו ב- FP באמצעות יחידות עצמאיות שהן "פונקציות", אנו יכולים לבדוק אותן בקלות רבה.- תמיכה במופשט מעל התנהגות
בניגוד ל- OOP, FP תומך בשני סוגי "מופשט מעל נתונים" ו "מופשט מעל התנהגות". מכיוון שהעולם האמיתי מכיל שניהם.- תמיכה ב-BigData
כיוון ש- FP תומך בתכנות מקבילי ובביצועים טובים יותר, FP מתאים מאוד לפיתוח אפליקציות BigData.- קוד עמיד ואמין
כפי ש- FP משתמש בנתונים לא משתנים, אנו יכולים לפתח קוד עמיד ואמין בקלות באמצעות FP.
חסרונות של תכנות פונקציונלי?
למעט היתרונות הגדולים, שפות תכנות פונקציונליות גם יש להן מעט או מינימלי או ניתנים להתעלמות חסרונות. להן יש רק את החסרונות הבאים:
- דורש הרבה זיכרון
ב- FP אין מצב. הן תמיד יוצרות אובייקטים חדשים כדי לבצע פעולות במקום לשנות אובייקטים קיימים. בגלל זה, אפליקציות FP מצריכות הרבה זיכרון. – לא מתמקדות בהחלפה של Liskov
מהם המושגים העיקריים בתכנות פונקציונלי?
המושגים הבאים הם מושגים עיקריים וחשובים בתכנות פונקציונלי.
- פונקציות ממערך ראשונה.
- הערכה עצלה.
- פונקציות מסדר גבוה.
- אי-שינויות (נתונים לא נעים).
- מודולריות.
- אין תופעות צד.
- הערכה עצלה.
- קריאות פונקציות רקורסיביות.
מה זה תכנות רישומי?
תכנות רישומי (IP) הוא אחד מפרדיגמות התכנות הפופולריות שבהן מבוצעת רצפי של שלבים/הוראות/הצהרות בסדר מסוים. דוגמאות לשפות תכנות רישומיות: Java, C, C++ ועוד
תכונות עיקריות של תכנות רישומי?
כל שפות תכנות רישומיות (IP) יכולות לכלול את התכונות הבאות:
- רצף של הצהרות.
- סדר הביצוע של הצהרות הוא חשוב מאוד.
- הן מכילות מצב.
- הן משתמשות בנתונים הנמצאים בשני סוגים: נתונים לא משתנים ונתונים משתנים.
- הן יכולות לשנות את המצב.
- הן עשויות לגרום לתופעות לוואי.
- מודל תכנות המשמש את המצב.
- הן משנות ישירות את מצב התוכנית.
- הן מייצגות מצב באמצעות שדות נתונים.
מהו תכנות מונחה עצמים?
תכנות עצמאי הוא סוג אחר של דיגמת תכנות. הוא מייצג הכל כאובייקט. כל אובייקט מכיל שדות נתונים ושיטות. כל תכניות תכנות עצמאיות מכילות מצב. הן משתמשות בנתונים נעים ומבני נתונים. כמו תכנות פונקציונלי, אנו יכולים לכתוב תכניות מלאות באמצעות נתונים לא נעימים, אך זה לא מחייב כלל. תכנות עצמאי הוא תת-קבוצה של תכנות סיפורי. הוא עוקב אחר כל התכונות של IP עם כמה תכונות נוספות. התכונות הנוספות הן:
- הכל הוא אובייקט.
- כל אובייקט מכיל שדות נתונים ושיטות.
- מושגים של תכנות עצמאי: התרסה, הצפנה, הורשה ופולימורפיזם
לעומת שפות תכנות פונקציונליות, שפות תכנות עצמאיות מתמקדות בעיקר ב- "איך זה צריך להתבצע". זה אומר שכמפתחים, אנו מתמקדים ב- "איך אתה עושה". בנוסף, תכנות עצמאי משלב גם "מה אתה עושה" ו-"איך אתה עושה". לכן אנו לא יכולים לכתוב קוד קצר וקריא יותר. רק מפתחים יכולים להבין את הקוד, אנשים אחרים יכולים להתבלבל יותר בקוד היישומים, הם לא יכולים להבין אותו.
חסרונות של תכנות עצמאי (OOP)?
גם אם תכנות עצמאי פותר רבים בעת אמת בעיות, עדיין יש לו את החסרונות הבאים (בהשוואה ל- FP):
- זה לא תומך באפשרות של ניצול מלא.
- זה לא מודולרי לגמרי.
- זה שובר את הקונספט של ההזנקה.
- ההורשה יש לה הרבה חסרונות.
חסרונות עיקריים של הורשה:
- שובר את עקרון ההזנקה
- כאשר רמות ההורשה עולות, זה מאוד קשה וקשה לתחזק וליצור אובייקטים.
מתי להשתמש בתכנות פונקציונלי?
אנו צריכים לבחור בתכנות פונקציונלי (FP) בתרחישים הבאים:
- כאשר אנו הולכים לבצע המון פעולות שונות על הנתונים שיש להם קבועים.
- במילים אחרות, כאשר יש לנו דברים מועטים עם יותר פעולות.
מתי להשתמש בתכנות מונחה עצמים?
אנו צריכים לבחור בתכנות מונחה עצמים (OOP) בתרחישים הבאים:
- כאשר אנו הולכים לבצע פעולות מעטות על המון נובעים שונים שיש להם התנהגות משותפת.
- במילים אחרות, כאשר יש לנו יותר דברים עם מעט פעולות.
הערה:- כאן הדברים הם אובייקטים בעולם האמיתי והפעולות הן פעולות בעולם האמיתי. לדוגמה, ב-Java אנו מייצגים את הדברים בעולם האמיתי כ"מחלקות" ואת הפעולות בעולם האמיתי כשיטות (פעולות).
ההבדלים בין FP ל-OOP(IP)?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: “What you are doing” | Main focus on “How you are doing” |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encaspulation | It breaks Encaspulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is “Function” | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses “Recursion” concept to iterate Collection Data. | It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both “Abstraction over Data” and “Abstraction over Behavior”. | Supports only “Abstraction over Data”. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
זהו הכל בנוגע לשלושת הפרדיגמות התכנות הפופולריות. הערה:- בסופסוף אני ממוקם ב-OOP, אך התחלתי לעבוד על FP לפני שנה בלבד. לכן, אם מומחי תכנות פונקציונלי מוצאים טעויות בפוסט זה, אנא תן לי את הערותיך היקרות. אני מזמין אתכם להשאיר לי תגובה אם אהבתם את הפוסט שלי או יש לכם ספקות או הצעות.