מבוא לביטויי Lambda
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 42 מתוך 56.
ביטויי למבדה הם תכונה רבת עוצמה של C++ שמאפשרת לך ליצור פונקציות קטנות ואנונימיות בדיוק במקום שבו הן נחוצות. אפשר לחשוב עליהן כעל פונקציות קטנות שאפשר להגדיר ולהשתמש בהן בלי לכתוב הצהרת פונקציה נפרדת.
התחביר הבסיסי של ביטוי lambda פועל לפי התבנית הזו: [](){}. הסוגריים המרובעים [] נקראים סעיף הלכידה, הסוגריים העגולים () מכילים פרמטרים (בדיוק כמו פונקציות רגילות), והסוגריים המסולסלים {} מכילים את גוף הפונקציה.
סעיף הלכידה קובע לאילו משתנים מהתחום המקיף יכולה הלמבדה לגשת. הצורות הנפוצות ביותר הן:
[=]: לכידת כל המשתנים המקומיים לפי ערך (הלמבדה מקבלת עותק משלה)[&]: לכידת כל המשתנים המקומיים לפי הפניה (הלמבדה ניגשת למשתנים המקוריים)[]: לא ללכוד דבר (הלמבדה אינה יכולה להשתמש במשתנים חיצוניים)כך יוצרים וקוראים ל-lambda פשוטה:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // קרא לפונקציית הלמבדהאפשר גם להגדיר ולהפעיל למבדה מיד, בלי לאחסן אותה במשתנה:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();ביטויי למבדה שימושיים במיוחד עבור פונקציות קצרות וחד-פעמיות שאינך רוצה להגדיר בנפרד. הם הופכים את הקוד שלך לתמציתי יותר ומשאירים לוגיקה קשורה קרובה זו לזו.
אתגר
קלצרו תוכנית שמדגימה את התחביר הבסיסי ואת אופן הביצוע של ביטויי למבדה. האתגר הזה יבחן את ההבנה שלכם כיצד להגדיר ולקרוא לפונקציות למבדה פשוטות ללא פרמטרים.
התוכנית שלכם צריכה:
- ליצור ביטוי למבדה שמדפיס
Hello from Lambda! - לאחסן את הלמבדה במשתנה באמצעות מילת המפתח
auto - לקרוא לפונקציית הלמבדה כדי לבצע אותה
- ליצור ביטוי למבדה שני שמדפיס
Lambda executed successfully! - לבצע את הלמבדה השנייה מיד, בלי לאחסן אותה במשתנה
השתמשו בפורמט הפלט המדויק הבא:
Hello from Lambda!
Lambda executed successfully!זכרו שביטויי למבדה משתמשים בתחביר [](){}, שבו הסוגריים המרובעים [] הם סעיף הלכידה, הסוגריים העגולים () מכילים פרמטרים (ריקים באתגר הזה), והסוגריים המסולסלים {} מכילים את גוף הפונקציה. אפשר לאחסן למבדה במשתנה באמצעות auto variableName = [](){...}; ואז לקרוא לה באמצעות variableName();. לביצוע מיידי אפשר להשתמש בתחביר [](){...}();, שמגדיר את הלמבדה וקורא לה בפקודה אחת.
נסו בעצמכם
#include <iostream>
using namespace std;
int main() {
// TODO: כתבו את הקוד שלכם למטה
// צרו ביטוי למבדה שמדפיס "Hello from Lambda!"
// שמרו אותו במשתנה באמצעות מילת המפתח auto
// קראו לפונקציית הלמבדה
// צרו למבדה שנייה שמדפיסה "Lambda executed successfully!"
// הפעילו אותה מיד בלי לשמור אותה במשתנה
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים4מפות (זוגות מפתח-ערך)
היכרות עם std::mapיצירת מפהגישה לערכים ושינויםבדיקה אם מפתחות קיימיםהסרת זוגותמעבר על מפהסיכום – שכיחות מילים7פונקציות מתקדמות
העברה לפי הפניהמבוא לביטויי LambdaLambda עם פרמטריםLambda עם ערכי החזרהמבוא לרקורסיהעצרת רקורסיביתמיון באמצעות Lambda2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטיםתרגלו בעצמכם: קומפיילר C++ אונליין