תכנות הכרחי לעומת הצהרה - ההבדל המוסבר באנגלית רגילה

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

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

מהי תכנות הכרחי?

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

תאר לעצמך שיש לנו רשימה של הסיסמאות הנפוצות בעולם:

const passwords = [ "123456", "password", "admin", "freecodecamp", "mypassword123", ];

האפליקציה שלנו הולכת לבדוק את סיסמת המשתמש בעת ההרשמה ולא לאפשר להם ליצור סיסמה שנמצאת מרשימה זו.

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

באופן חובה, היינו כותבים:

// using the passwords constant from above let longPasswords = []; for (let i = 0; i = 9) { longPasswords.push(password); } } console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];
  1. אנו יוצרים רשימה ריקה בשם longPasswords.
  2. ואז אנו כותבים לולאה שתפעל כמה פעמים שיש סיסמאות passwordsברשימה המקורית .
  3. ואז אנו מקבלים את הסיסמה באינדקס איטרציה הלולאה בה אנו נמצאים כעת.
  4. לאחר מכן אנו בודקים אם סיסמה זו ארוכה או שווה ל- 9 תווים.
  5. אם כן, הכנסנו אותו longPasswordsלרשימה.

אחד מנקודות החוזק של תכנות חיוני הוא העובדה שקל לחשוב עליו. כמו מחשב, אנו יכולים לעקוב אחר שלב אחר שלב.

מהו תכנות הצהרתי?

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

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

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

אז במקום לתת הוראות שלב אחר שלב למחשב, אנו מצהירים מה אנו רוצים ואנחנו מקצים זאת לתוצאה של תהליך כלשהו.

// using the passwords constant from above const longPasswords = passwords.filter(password => password.length >= 9); console.log(longPasswords); // logs ["freecodecamp", "mypassword123"];

הרשימה של longPasswordsמוגדרת (או מוכרזת) כרשימה passwordsהמסוננת לסיסמאות בלבד הגדולות או שוות ל- 9 תווים.

שיטות התכנות הפונקציונליות ב- JavaScript מאפשרות לנו להכריז בצורה נקייה על דברים.

  • זו רשימת סיסמאות.
  • זו רשימה של סיסמאות ארוכות בלבד. (לאחר ריצה filter.)
  • זוהי רשימת סיסמאות עם מזהים. (לאחר ריצה map.)
  • זו סיסמה אחת. (לאחר ריצה find.)

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

וכאשר חברינו למפתחים יבואו ויבחנו את הקוד שלנו, הם יכולים למצוא באגים ביתר קלות:

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

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

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

מייק זטלו הוא המדריך הראשי במחנה הקוד 10x .