PracticU

Lint

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Lint
מילון מושגים:
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.

Lint
Lint הוא מנגנון מובנה ב-Android Studio שמסמן למתכנת דברים לא אופטימליים בקוד. השם אינו ראשי תיבות אלא מילה באנגלית שמשמעותה "מוך", סיבי הבד שמתנתקים מהבגדים, והמטאפורה היא לקוד שאינו תורם דבר. בהרצאה עוברים על אזהרות Lint נפוצות בקובצי XML וב-Java ועל הדרכים לתקן אותן.
איך מזהים ומתקנים
1. צבעים וספירה: שורות עם בעיה מסומנות בצהוב (warning) או באדום (error), ובפינה העליונה של הקובץ מופיע מונה שמראה כמה אזהרות ושגיאות יש. כשהקובץ נקי מופיע V ירוק עם No problems found.
2. Hardcoded string: מחרוזת שנכתבה ישירות בקוד מסומנת באזהרה should use string resource. מחרוזת כזו אי אפשר לתרגם, ובמקרה שצריך אותה בכמה מסכים צריך לשכפל אותה. עומדים על האזהרה, לוחצים Alt+Enter ובוחרים Extract string resource.
3. DP במקום SP בגודל טקסט: ב-textSize צריך להשתמש ב-SP. יחידת SP מושפעת מהגדרת גודל הטקסט שהמשתמש קבע בטלפון, ו-DP לא. Alt+Enter ובחירה ב-Replace with sp מתקנות את זה.
4. EditText בלי hint או inputType: הוסיפו inputType כדי שהמכשיר יציג מקלדת מתאימה, למשל מקלדת לאימייל או מקלדת ספרות לטלפון. עבור שם אדם הוגדר textPersonName, שמציג מקלדת בלי מקש Enter. אפשר לשלב כמה ערכים עם קו אנכי, למשל עם textCapWords, כך שכל מילה מתחילה באות גדולה.
5. בעיות בקובץ Java: מייבוא שאינו בשימוש (unused import) ומשתנה פרטי שאינו בשימוש מסומנים באפור, ופשוט מוחקים אותם. אזהרת field can be converted to a local variable מופיעה על משתנה ברמת המחלקה שבו משתמשים רק בפונקציה אחת, והפעולה Convert to Local מעבירה אותו לפונקציה.
6. תקנו מיד: כשרואים צהוב כדאי לעצור ולטפל מיד, ולא להשאיר הערות לסוף הפיתוח.
הגדרות Lint
הגדרות המנגנון נמצאות ב-File > Settings > Editor > Inspections > Android Lint. לכל בדיקה יש V שמסמן שהיא פעילה, ואפשר לקבוע אם היא תוצג כ-warning או כ-error. יש גם אפשרות להחזיר לברירת המחדל.
- הערות TODO: הערה שמתחילה ב-TODO: נצבעת בכחול ומופיעה בחלונית TODO, אפשר לדלג ביניהן וזה עובד גם ב-XML. כברירת מחדל TODO אינה warning, אבל אפשר להגדיר אותה כך.
- XML Tag Empty Body: תגית שנפתחת ונסגרת בלי תוכן מקבלת אזהרה. התיקון הנכון הוא תגית ריקה סוגרת-את-עצמה (self-closing). אפשר גם להפוך את הבדיקה ל-error או לכבות אותה.
- דרך מהירה להגיע להגדרה: באזהרה עצמה בוחרים edit inspection profile settings.
אפשרויות השתקה
ב-Alt+Enter יש גם Disable inspection והשתקות (Suppress). אפשר להשתיק על משתנה או פונקציה ספציפיים, על כל המחלקה (Suppress for class), או לכבות את כל הבדיקות במחלקה (Suppress all inspections for class). המרצה לא ממליץ על כך, כי מאבדים הערות שכדאי לטפל בהן. אם Lint מצביע על בעיה, סביר שהיא אמיתית.
אחרי ההרצאה אפשר לקרוא אזהרות Lint, לתקן את הנפוצות שבהן עם Alt+Enter, ולשלוט בחומרה שלהן דרך ההגדרות.
השיעור הבא בקורס: Wrong API Solutions

פרקי ההרצאה: Lint

  1. 00:00

    מהו מנגנון Lint ומקור השם

  2. 01:16

    אפליקציית דוגמה לבדיקת Lint

  3. 02:14

    סימוני Warning ו-Error בקוד

  4. 03:32

    חילוץ Hardcoded String ל-Resource

  5. 06:01

    החלפת DP ב-SP לגודל טקסט

  6. 08:15

    הגדרת inputType לתיבת טקסט

  7. 11:13

    Import ומשתנים שלא בשימוש

  8. 13:43

    צפייה בהגדרות Lint

תמלול ההרצאה: Lint

הטקסט המלא של הדקות הראשונות בהרצאה «Lint» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:27

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

  3. 00:55

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

  4. 01:17

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

  5. 01:40

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

  6. 02:04

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

  7. 02:31

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

  8. 02:58

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

  9. 03:26

    קודם כל למה מנגנון הלינט הזה אמר לנו שהדברים האלה הם לא אופטימליים וכמובן בואו נתקן אותם אז נלך לדבר הראשון והדבר הראשון הוא אומר לנו hardcoded string קודם כל hardcoded זה סרוב בקוד זה מכרוזת או מספר שרשמנו אותו as is בקוד hardcoded string הוא נעלם לי בואו נעלה עליו welcome should use string resource אם אני

  10. 03:57

    עולה על זה אני מקבל בדיוק את אותה הערה כי ומציינת אותו הדבר זאת אותה השורה hardcoded string welcome should use string resource כאשר אנחנו למדנו על כל הנושא של ה-resources ושל ה-string ריסורס ראינו שזה לא נכון באמת להגדיר סטרינג הארד קודד בקוד מפני שאז אנחנו לא יכולים בכלל לתרגם אותה כאשר בעתיד נרצה לתרגם את

  11. 04:24

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

  12. 04:45

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

  13. 05:09

    הראשונה זה אקסטרקט סטרינג ריסורס בואו נלחץ נקרא לה welcome enter ואנחנו רואים שהוא שתה לנו את זה כאן הנה אנחנו רואים את ה-welcome ויותר מזה העלים לנו את ההערה הזאת בואו ניגש ונראה שיש רק שמונה וורנינגים עכשיו בואו בבת אחת נטפל בכל ההערות האלה של המחרוזות Enter your full name, נוציא את זה ל-String resource,

  14. 05:47

    עוד הערה נעלמה לה, Show, אל ת-Enter, נוציא את זה ל-String resource וסיימנו את שלושת המחוזות.

  15. 05:58

    בואו ניגש ונראה, נשארו לנו רק שישה וורנינגים. הדבר הבא, יש לנו פה את היחידות מידע האלה על הטקסט סייז, ויחידות המידע אנחנו רואים 25 dp, מה בדיוק הבעיה?

  16. 06:16

    אם אנחנו מסתכלים על ההערה אנחנו רואים should use SP instead of DP for text sizes ואכן כאשר למדנו על יחידות מידע בתחילת הקורס אז ראינו באמת שDP זה יחידת מידע עבור גדלים ומרחקים אבל לא עבור גדלים של טקסטים.

  17. 06:37

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

  18. 06:52

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

  19. 07:04

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

  20. 07:39

    בעצמי אני רואה שהפכתי להיות קצת עצלן אבל זה כיף שמישהו משלים לי את הקוד אלט אנטר על הdp הזה עוד אנטר והנה הוא סידר לי את הבעיה בואו ניגש לכאן אלט אנטר סדר לי אותו ל-sp איזה כיף מישהו כותב בשבילי את ה-s במקום d סדר לי את זה ואחרון סדר לי אותו ובואו נבדוק ונראה שנשארה לנו הערה אחת הנה היא פה מה הוא רוצה בהערה הזאת בהערה הזאת מה שהוא אומר לנו

  21. 08:21

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

  22. 08:44

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

  23. 09:05

    אז בואו ניגש ונגיד לו שהאינפוט טייפ שלנו זה בעצם טקסט person name כי אני רוצה לקבל שם של בן אדם ו-person name זה בעצם input type שאומר שאין לנו enter את מכש ה-enter במקלדת, כי כשאתם מכניסים שם של משתמש אתם לא צריכים ללחוץ enter.

  24. 09:31

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

  25. 10:03

    בכל מילה ואנחנו יכולים את שניהם ביחד אנחנו לוקחים את הראשון ואז עם קו אנכי מה נקרא ורטיקל פייפ לבוא ולהגיד לו אני רוצה גם את זה וגם את זה עכשיו המקלדת תהיה בלי אנטר בהתאם למקלדת של שם של משתמש וגם כל מילה תתחיל באות גדולה אוטומטית אבל אם אנחנו מסתכלים עכשיו פה למעלה אנחנו רואים שיש לנו v no problems found איזה מגניב כל הקובץ הזה תוקן מהערות של לינט אז כמובן כל קוד שאנחנו כותבים עדיף

  26. 10:42

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

  27. 11:07

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

  28. 11:23

    בואו נראה את הראשון הראשון הוא כותב לנו unused import statement בואו ניגש לכל האימפורטים נפתח ובאמת נראה שיש פה איזשהו אימפורט שהשתרברב לו כאן של image view ובכלל אין לי פה image view בקוד אז אנחנו כבר יודעים שהאפור הזה זה אומר משהו לא בשימוש וזה משהו לא רצוי זה כמו אותו סיב בד שהוא לא תורם שום דבר

  29. 11:52

    לאף אחד והוא ממש לא בשימוש ואנחנו תמיד מעיפים אותו אז הכי פשוט לבוא ולהיפטר מהדבר הזה בואו נמחק את זה והופה נעלמה לה הערה אחת היזה בגניב הקוד יותר נקי בואו ניגש ונראה כשיש לנו פה עוד שתיים לדוגמה יש לנו את זה private field sum number is never used הנה הוא אנחנו רואים אותו גם פה באפור באמת סתם זרקתי פה איזה שהוא

  30. 12:21

    משתנה שהוא לא בשימוש אין לנו מה לעשות איתו ביי ביי נעיף אותו הדבר הבא שיש לנו זה ההערה האחרונה למעשה field can be converted to a local variable זה מעניין הנה פתחתי כאן האמת בכוונה בשביל להראות את זה איזשהו משתנה לוקאלי או ליתר דיוק סליחה לא משתנה לוקאלי משתנה גלובלי ברמת מחלקה data member מה נקרא או field

  31. 12:47

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

  32. 13:08

    להגדיר אותו כאן באזור הלוקאלי בוא נראה אם מנגנון הלינק פותר לנו את זה אלט אנטר ואנחנו רואים שהוא אומר לנו convert to local בטח בוא תעביר לי אותו למשתנה לוקאלי אנחנו לוחצים עליו ושימו לב מה קרה א' הוא מחק לנו אותו ובית הוא הפך את המשתנה הזה ללוקאלי הוא הגדיר פה סטרינג אנחנו מסתכלים ואנחנו רואים שגם בקובץ הג'אווה אין לנו

  33. 13:36

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

  34. 14:12

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

  35. 14:28

    בואו נראה אחד או שתיים ואיך אנחנו יכולים לשנות משהו בהגדרות. אז בואו ניגש כאן לדוגמה לג'נרל דברים כלליים

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Using the DDMS

ההרצאה הבאה: Wrong API Solutions

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון