דפוסי בדיקת Null
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 33 מתוך 66.
בדיקת ערכי null היא חלק חיוני מכתיבת קוד C# עמיד. יש כמה דפוסים שאפשר להשתמש בהם כדי לבדוק בבטחה אם ערכים הם null.
בואו נבחן כמה דפוסים נפוצים לבדיקת null:
ראשית, הבדיקה הבסיסית אם הערך הוא null:
string name = null;
if (name == null)
{
Console.WriteLine("Name is null");
}
תבנית נפוצה נוספת היא האופרטור המותנה-ב-null (?.), שמאפשר גישה בטוחה לחברים של אובייקטים שעשויים להיות null:
string name = null;
int? length = name?.Length; // הערך של length יהיה null
אופרטור איחוד ערכי null (??) מספק ערך ברירת מחדל כאשר ביטוי הוא null:
string name = null;
string displayName = name ?? "Unknown"; // הערך של displayName יהיה "Unknown"
אפשר גם לשרשר את הדפוסים האלה לתרחישים מורכבים יותר:
string name = null;
int length = (name ?? "").Length; // הערך של length יהיה 0
השיטה string.IsNullOrWhiteSpace() היא דרך נוחה לבדוק אם מחרוזת היא null, ריקה או מכילה רק תווי רווח לבן: הכול בקריאה אחת:
string name = null;
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("Name is null, empty, or whitespace");
}
הדבר שימושי במיוחד כשצריך להתייחס ל־null, למחרוזות ריקות ולמחרוזות שמכילות רק רווחים באותו אופן. לדוגמה:
string name1 = null;
string name2 = "";
string name3 = " ";
// שלושתם ידפיסו את ההודעה
if (string.IsNullOrWhiteSpace(name1)) Console.WriteLine("name1 is null/empty/whitespace");
if (string.IsNullOrWhiteSpace(name2)) Console.WriteLine("name2 is null/empty/whitespace");
if (string.IsNullOrWhiteSpace(name3)) Console.WriteLine("name3 is null/empty/whitespace");
שימו לב ש-string.IsNullOrWhiteSpace() שונה מבדיקה פשוטה של null. היא מזהה גם מחרוזות ריקות ומחרוזות שמכילות רק רווחים, טאבים או תווי רווח לבן אחרים.
אתגר
קלצרו מתודה בשם processUserName שמקבלת פרמטר מחרוזת userName. המתודה צריכה:
- אם
userNameהוא null, להחזיר "No user provided" - אם
userNameריק או מכיל רק רווחים לבנים, להחזיר "Invalid username" - אחרת, להחזיר "Welcome, [userName]!" כאשר [userName] הוא שם המשתמש בפועל
זכרו להשתמש בתבניות מתאימות לבדיקת null.
נסו בעצמכם
using System;
class ProcessUserName
{
public static string processUserName(string userName)
{
// כתבו את הקוד שלכם כאן
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםהכרזה ואתחול של מערכים דו־ממדייםגישה לאיברי מערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםמערכים משונניםפעולות מטריצה נפוצותחזרה – מערכים רב־ממדיים7אופרטורים לוגיים מתקדמים
הערכה בקיצור דרךאופרטורים לוגיים מותניםקדימות אופרטוריםסיכום – אופרטורים מתקדמים2קבלת החלטות מתקדמת
תנאים מרוביםלוגיקה בוליאנית מורכבתהשוואה בין If ל-Switchהצהרות Switch מקוננותסיכום — קבלת החלטות מתקדמת5טיפול בחריגות
יסודות try-catchסוגי חריגותבלוקי catch מרוביםעבודה עם קבציםבלוק finallyשימוש ב-using לעומת try-finallyחריגות מותאמות אישיתסיכום – טיפול בשגיאות3שיפורים בלולאות
ביצועי לולאותאיטרציה במבנים מורכביםכל אחד מסוגי הלולאותרפקטורינג של לולאותסיכום – לולאות שעברו אופטימיזציה6טיפול בערכי Null
יסודות הפניה ל-Nullטיפוסי ערכים שניתנים ל-Nullדפוסי בדיקת Nullתכנות הגנתיסיכום – בטיחות מול Nullתרגלו בעצמכם: קומפיילר C# אונליין