זהו נושא דיון מלווה לערך המקורי שב־https://www.tocode.co.il/bundles/frontend/lessons/js-lab
בשאלה 4 יש טעות בהגדרת rot13
צריך להיות תוספת שאם קוד האות + 13 גדול מ 122 אז יש להפחית 13 מקוד האות
אני מעדיף להסתכל על זה בצורה מעגלית, כלומר אחרי z בא שוב a. תיקנתי את הטקסט, תודה!
הי חיה כן נראה כיוון מצוין. כנראה ששווה לעשות את הבדיקות אחת אחרי השניה כך שאם אחת הבדיקות נכשלת לא תצטרכי להמשיך לבדוק את הביטויים הרגולאריים האחרים
היי,
איך אני מחפש אם יש במילה תו שהוא לא מספר או אות ?
ראיתי שהגיבו /[!-*(?)]/ אבל זה לא תופס את כל הסמלים
האם יש דרך כמו /[a-z]/ שתופס את כל הסמלים ?
אשמח אם תראה פתרונות לשאלות שאתה שואל
הי,
ביטוי רגולארי שיתפוס ״משהו שהוא לא מספר או אות או קו תחתי״ זה פשוט:
/[^\w]/
ואפשר להשתמש בו ככה:
"hello!".match(/[^\w]/)
תרגיל 3 - האם יש דרך יותר קצרה או פשוטה לעשות את זה?
פתרתי… אבל נראה לי בדרך הכי ארוכה שאפשר…
let a = lenghs(Math.floor(Math.random() * 1000));
function lenghs(a) {
for (let index = 0; index < a; index++) {
a = Math.floor(a / 10);
b = b + 1;
}
return b;
}
console.log(b);
הי אתה מדבר על תרגיל משחק ניחוש המספרים? כי מה שאני התכוונתי שם זה להשתמש ב prompt כדי לתת למשתמש הזדמנות לכתוב מספר, ואז להדפיס למסך האם המספר שהמשתמש בחר הוא גדול או קטן יותר מהמספר שהוגרל.
אני רואה בתוכנית שלך את הגרלת המספר האקראי, אבל לא הבנתי מה הפונקציה lengths אמורה לחשב או מאיפה b הגיע.
ופה הייתי מוסיף כמה טיפים באופן כללי לקוד שיהיה יותר קל לקרוא אותו:
-
כדאי להוסיף הערה בתחילת הקוד שמסבירה מה התכוונת לעשות, ו/או איך הקוד אמור לעשות את מה שהתכוונת.
-
כדאי לבחור שמות בעלי משמעות לפונקציות, כך שאפשר יהיה רק מהשם להבין מה הפונקציה עושה. בנוסף להוסיף הערה מעל הפונקציה שמסבירה מה הפונקציה מקבלת ומה היא מחזירה. לדוגמה אם הייתי רוצה לכתוב פונקציה שמחשבת את סכום הספרות במספר הייתי הולך על משהו כזה:
// this function takes a number "n" and returns the sum of its digits
// Example usage: sum_digits_in(234) === 9
function sum_digits_in(n) {
}
- שמות משתנים בתוך פונקציות צריכים לשקף את המשמעות של אותם המשתנים. בדוגמה של סכום הספרות אני יכול לבחור מימוש כזה עם הערות ושמות בעלי משמעות:
/**
* sum_digits_in - calculates the sum of digits for a number
*
* @param {number} n - the input number
* @return {number} sum of digits of n
*
* @example
* sum_digits_in(234) => returns 9
*/
function sum_digits_in(n) {
const digits = split_digits(n);
return digits.reduce((a, b) => a + b, 0);
}
/**
* split_digits - returns an array of the digits of a number
*
* @param {number} n - the input number
* @return {number} - an array of its digits
*
* @example
* split_digits(234) => returns [2, 3, 4]
*/
function split_digits(n) {
// Convert n to an array of digits using string manipulation
// For example if n === 234:
// String(n) === "234"
// "234".split('') === ["2", "3", "4"]
// ["2", "3", "4"].map(d => Number(d)) === [2, 3, 4]
return String(n).split('').map(d => Number(d));
}
וכן הדוגמה קצת מוקצנת כי יש בה הרבה יותר הערות מקוד אבל מה שחשוב לראות זה איך ההסברים עוזרים לך להבין מה קורה מתי ולמה דברים עובדים.
- רצוי להצהיר עם משתנים בתוך פונקציה עם let או const בתחילת הפונקציה או בפעם הראשונה שמשתמשים בהם. אצלך לא ברור מאיפה b הגיע.
אשמח לראות גירסה מעודכנת (לא חייב להיות קוד שונה, רק יותר מובן) ואז נמשיך לראות איך להתאים אותה לתרגיל.
שאלה 5
הקוד נכון
function isStrongPassword (str){
let bigLetter= /[A-Z]/;
let smallLetter= /[a-z]/;
let number= /[0-9]/;
let sign = /[!@#$%^&*()_+=-]/;
if(str.length >= 7 && str.match(smallLetter)&& str.match(bigLetter)&&str.match(number)&& str.match(sign)){
return true
};
return false;
}
כן נראה מעולה הכי כיף ביטויים רגולאריים
בתרגיל 1 אני אמורה לכתוב בעצמי פונקציה שהיא כמו רנדום או להשתמש בקיימת?
הי,
את צריכה להשתמש ב Math.random
ולעשות משהו עם התוצאה שהיא מחזירה כדי לקבל מספר אקראי בין שני המספרים שהתקבלו כפרמטרים, כי באופן רגיל Math.random מחזירה תמיד מספר בין 0 ל 1