מעבר על נושאים כללים בסי שארפ


נושאים כללים

מה?

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

  1. Access modifiers

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


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

    אדגיש כי בפרוייקטים השימוש הוא כרגע רק בpublic,protected,internal ואתם מרגישים שהבנתם אותם אם הבנתם אותם תרגישו חופשי לעבור הלאה, אין צורך להרחיב.
  2. LINQ

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

    וכעת, נצפה בסרטון זה הסוקר את מירב הפעולות הבסיסיות.
    לצפייה

    שימו לב שאתם מכירים את
    • Select: מעבירה כל איבר באוסף לפורמט אחר. לדוגמה, אם יש לך רשימה של מספרים, אתה יכול להפוך כל מספר למחרוזת.
    • SelectMany: משטחת אוסף של אוספים לאוסף יחיד. לדוגמה, אם יש לך רשימה של רשימות, אתה יכול לקבל רשימה אחת גדולה שמכילה את כל האיברים מכל הרשימות הקטנות.
    • ToList: ממיר אוסף כלשהו לרשימה.
    • ToDictionary: ממיר אוסף כלשהו למילון.
    • Where מסננת אוסף ומחזירה רק את האיברים שעונים על תנאי מסוים.
    • Count: מחזירה את מספר האיברים באוסף.
    • GroupBy: מקבץ את האיברים באוסף לפי תכונה מסוימת.
    • Sum: מחשבת את סכום הערכים המספריים באוסף.
    • Max: מחזירה את הערך המקסימלי באוסף.
    • Min: מחזירה את הערך המינימלי באוסף.
    • Take: מחזירה מספר קבוע של איברים מהתחלה של האוסף.
    • Skip: מדלג על מספר קבוע של איברים מהתחלה של האוסף ומחזיר את השאר.
    • First: מחזירה את האיבר הראשון באוסף.
    • FirstOrDefault: מחזירה את האיבר הראשון באוסף, או ערך ברירת מחדל אם האוסף ריק.
    • Single: מחזירה את האיבר היחיד באוסף, ומחזירה שגיאה אם יש יותר מאלמנט אחד או אם האוסף ריק.
    בונוס: פעולות הלינק מתבצעות על אובייקטים שיורשים מIEnumerable כדי להבין מה האינטרפייס הזה, ואחרים הקשורים אליו מייצגים, מוזמנים לצפות בסרטון הבא
    לצפייה

  3. Lists vs Dictionaries

    מתי יותר יעיל להשתמש ברשימה על פני מילון? העמיקו בשאלה הזו בכתבה הזו - לינק.
    כעת נבחן כמה מקרים של חיפוש אובייקט בודד לפי סטרינג, ותענו האם כדאי להשתמש במילון או רשימה.
    • אוסף של 10,000 תלמידי בית ספר.
      הצג תשובה
      • רשימה: 38,714.58 ns
      • מילון: 62.94 ns

    • אוסף של 5 פריטים ברשימת קניות.
      הצג תשובה
      • רשימה: 110.12 ns
      • מילון: 80.62 ns
      למרות שמילון יהיה יותר מהיר פה, נעדיף להשתמש במקרה זה ברשימה מכיוון שהבדלי הביצועים הם זניחים, ורשימה תתפוס פחות מקום בזכרון.

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

    לצפייה


    ולסיכום, קלאס הולך לHeap וסטראקט לStack.
  5. Dependency Injection

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

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

    אז מה יהיה אורח החיים של סרביסים באיג'קשן באפליקציית שרת, כאשר הם מוגדרים כSingleton,Transient,Scoped?
    הצג תשובה
    • Singleton - אובייקט אחד נוצר לכל האפליקציה.
    • Scoped- אובייקט אחד נוצר לכל בקשת HTTP.
    • Transient- אובייקט אחד נוצר בכל פעם שמבקשים אותו משירות הDI.

  6. Pattern Matching

    לצפייה


    כחלק מpattern matching ניתן להשוות משתנה לערך קונסטי, למשל var2 is 42 או var1 is "Hello". ההבדל בין השימוש בis לבין == הוא זניח בהקשרי ביצועים (מוזמנים להרחיב עצמאית). אך איפה שהוא כן יהיה עדיף הוא בהשוואה לנאל. והסיבה לכך מפורטת בכתבה הזו - לינק.
  7. Memory Stream

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

  8. IReadOnlyCollection

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


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

  9. HashSet

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

    מבנה נתונים זה די נישתי, אך יכול להיות שימושי אם נרצה לבדוק הכלות של טיפוסים פרימיטיביים ברשימה מוכנה מראש.
  10. Frozen Sets And Dictionaries

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

  11. AsyncLocal

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

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

  12. Extensions




אין תגובות:

הוסף רשומת תגובה