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

מאת ג'ון פול מולר

neosporin eczema essentials creme נגד גירוד

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



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



תכנות פונקציונלי

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



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

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

הבנת המטרות של תכנות פונקציונלי

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



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

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

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

שימוש בגישה הטהורה לתכנות פונקציונלי

שפות תכנות המשתמשות בגישה הטהורה לפרדיגמת התכנות הפונקציונלית נשענות על עקרונות חשבון הלמדה, לרוב. בנוסף, שפה בגישה טהורה מאפשרת להשתמש בטכניקות תכנות פונקציונליות בלבד, כך שהתוצאה היא תמיד תוכנית פונקציונלית. שפת הגישה הטהורה היא Haskell מכיוון שהיא מספקת את היישום הטהור ביותר, על פי מאמרים על תכנות פונקציונלי . האסקל היא גם שפה פופולרית יחסית, על פי מדד TIOBE . שפות אחרות בגישה טהורה כוללות את Lisp, Racket, Erlang ו- OCaml.

כמו ברכיבי תכנות רבים, הדעות פועלות חזק בשאלה האם שפת תכנות מסוימת כשירה למעמד טהור. לדוגמא, אנשים רבים רואים ב- JavaScript שפה טהורה, למרות שהיא אינה מוקלדת. אחרים מרגישים ששפות הצהרה ספציפיות לתחום כמו SQL ו- Lex / Yacc מתאימות למעמד טהור למרות שאינן שפות תכנות כלליות. עצם קיומם של אלמנטים תכנתיים פונקציונליים אינו מכשיר שפה כדבקות בגישה הטהורה.

שימוש בגישה הטמאה לתכנות פונקציונלי

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

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