ABA


"שאלה למתחילים בנוגע לjs."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #22000 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 22000
1337Swat 
חבר מתאריך 28.9.05
30852 הודעות
   11:27   11.06.17   
אל הפורום  
  שאלה למתחילים בנוגע לjs.  
 
   יש לי איזה תרגיל לבצע ואינני מוצא מדריך או הכוונה לבצע את אותו אחד,

התרגיל-
לקבל מערך של מספרים ולהפוך כל מספר זוגי במערך למספר אי זוגי הקרוב למכפלת המספר בעצמו, לדוגמא-
3,2,5,7,4,8,9 -> 3,5,5,7,17,65,9

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

בנוסף שאלה נוספת, עניין ממוצע של מספרים מדובר בsum או בavg?

תודה מראש.



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

  האשכול     מחבר     תאריך כתיבה     מספר  
  משהו בסגנון: משה הלולן 11.06.17 11:45 1
     מכתב 1337Swat  11.06.17 12:01 2
     טיפ לקיצור כל הקוד הזה לשורה אחת: Ben_d 11.06.17 19:39 3
         למתחילים עדיף קוד ארוך וקריא יותר מאשר קצר מתוחכם ומאיים barakm 11.06.17 20:43 4
             אני חושב שאפשר להבין לבד בהינתן השאלה הפשוטה Ben_d 11.06.17 21:04 5
         תמיד טוב לדעת את קיצור הקוד, 1337Swat  11.06.17 22:19 6
         הקוד שלך הוא שורה אחת כי הוא משתמש בפונקציה קיימת ב-JS Bar  11.06.17 23:36 7
             לא בידיוק Ben_d 12.06.17 00:01 8
                 כמובן שההפרשים לא מהותיים, אבל בעצם השורה שהצעת פה היא ''מסכה'' Bar  15.06.17 11:49 9
                     פתחתי jspref בשביל הספורט משה הלולן 15.06.17 14:42 10
                         לא מפתיע אותי :) Bar  15.06.17 14:44 11
                             אין לי הבנה במנועים של הדפדפנים משה הלולן 15.06.17 14:54 12
                                 כשזה מגיע לביצועים, אתה מודע לזה שאין משמעות לקריאות של קוד, כן? Bar  15.06.17 15:29 13
  למה זה לא מציג לי את התוצאה? זה משגע אותי 1337Swat  18.06.17 23:16 14
     איפה אתה מחפש אותם? בconsole, כן ? sza  20.06.17 08:18 15
         מכתב 1337Swat  20.06.17 08:20 16
             תלחץ F12 בכרום, תפתח את הלשונית CONSOLE ותראה שם את הפלט sza  20.06.17 09:07 17
                 מעולה תודה! לא חשבתי על זה! :) 1337Swat  20.06.17 09:44 18

       
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק
   11:45   11.06.17   
אל הפורום  
  1. משהו בסגנון:  
בתגובה להודעה מספר 0
 
  

function even(x) {
return x % 2 == 0;
}

var numbers = ;
var res = ;
numbers.forEach(function (number) {
if (even(number)) {
number = number * number + 1;
}
res.push(number);
});

console.log(res);

https://jsfiddle.net/dtgtwdLb/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
1337Swat 
חבר מתאריך 28.9.05
30852 הודעות
   12:01   11.06.17   
אל הפורום  
  2. מכתב  
בתגובה להודעה מספר 1
 
   תודה על התגובה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ben_d
חבר מתאריך 15.6.16
706 הודעות
   19:39   11.06.17   
אל הפורום  
  3. טיפ לקיצור כל הקוד הזה לשורה אחת:  
בתגובה להודעה מספר 1
 
  
inputArray.map(n => n%2 === 0 ? n*n + 1 : n )


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
barakm לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.5.08
4642 הודעות, 1 פידבק
   20:43   11.06.17   
אל הפורום  
  4. למתחילים עדיף קוד ארוך וקריא יותר מאשר קצר מתוחכם ומאיים  
בתגובה להודעה מספר 3
 
או שתצרף הסבר מה השורת קוד בדיוק עושה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ben_d
חבר מתאריך 15.6.16
706 הודעות
   21:04   11.06.17   
אל הפורום  
  5. אני חושב שאפשר להבין לבד בהינתן השאלה הפשוטה  
בתגובה להודעה מספר 4
 
   ואם לא, העצה הטובה ביותר למתכנתים מתחילים -> משתמשים בגוגל (js map, js =>, js ? operator)

(סליחה אם זה יצא קצת מתנשא, הכוונה לעודד יכולת למידה עצמית)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
1337Swat 
חבר מתאריך 28.9.05
30852 הודעות
   22:19   11.06.17   
אל הפורום  
  6. תמיד טוב לדעת את קיצור הקוד,  
בתגובה להודעה מספר 3
 
   בגדול אני עובר על הקוד באופן כללי לתרגילים בשביל מקום שאני הולך אליו, בודקים דברים בסיסים לגבי מסלול לימודים מסוים...

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

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Bar  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
24027 הודעות, 7 פידבק
   23:36   11.06.17   
אל הפורום  
  7. הקוד שלך הוא שורה אחת כי הוא משתמש בפונקציה קיימת ב-JS  
בתגובה להודעה מספר 3
 
   זה לא אומר כלום על יעילות הקוד.
סביר להניח שהקוד שהוצע למעלה יותר יעיל משלך, מפני שהוא הרבה יותר ספציפי, בעוד map הוא הרבה יותר גנרי.


He who makes a beast out of himself,
gets rid of the pain of being a man.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ben_d
חבר מתאריך 15.6.16
706 הודעות
   00:01   12.06.17   
אל הפורום  
  8. לא בידיוק  
בתגובה להודעה מספר 7
 
   למה לא?
- לולאת for (רגילה) יותר מהירה מ-forEach ו-map (שפחות או יותר שוות ערך)
- שימוש ב-push יכול לגרום למספר הקצאות מחדש בזמן ריצת הלולאה
- קריאה ל-even() מוסיפה תקורה

בכל מקרה, ההבדלים לא יהיו משמעותיים מספיק כדי באמת להתווכח עליהם


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Bar  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
24027 הודעות, 7 פידבק
   11:49   15.06.17   
אל הפורום  
  9. כמובן שההפרשים לא מהותיים, אבל בעצם השורה שהצעת פה היא ''מסכה''  
בתגובה להודעה מספר 8
 
   הרי ש-map היא פונקציה בפני עצמה, פשוט אין לך הסתכלות על הקוד שלה.
בשונה למשל מ-one-line-if שמבצע אותה פונקציונליות כמו בלוק של if-else שלם, רק בשורה אחת

לדוג':


int i;
int status;

if(status==1)
int = 5;
else
int = 6;


int i = status==1 ? 5:6;


He who makes a beast out of himself,
gets rid of the pain of being a man.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק
   14:42   15.06.17   
אל הפורום  
  10. פתחתי jspref בשביל הספורט  
בתגובה להודעה מספר 9
 
  

מעניין ציפיתי שלא יהיה הבדלים מהותיים לטובת השורה אחת אבל הארוך מנצח

https://jsperf.com/1-line-vs-multi-line

השינוי היחיד שעשיתי זה להוריד את הפונקציה even כי זה לא חוכמה בכל מקרה

אם טעיתי במשהו תתקנו

@Bar@
@Ben_d@


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Bar  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
24027 הודעות, 7 פידבק
   14:44   15.06.17   
אל הפורום  
  11. לא מפתיע אותי :)  
בתגובה להודעה מספר 10
 
   כלל אצבע:
אם יש לך קטע קוד שאתה חייב שיהיה כמה שיותר יעיל, תשתמש בכמה שפחות פונקציות מובנות, ואם אפשר גם בשפה כמה שיותר נמוכה

עריכה:
אם אתה רוצה באמת לבדוק את ההבדל ביעילות, תריץ את הקוד על מערך גדול מאוד.

@משה הלולן@


He who makes a beast out of himself,
gets rid of the pain of being a man.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק
   14:54   15.06.17   
אל הפורום  
  12. אין לי הבנה במנועים של הדפדפנים  
בתגובה להודעה מספר 11
 
   מגיגול זריז גם לא מצאתי תשובה חד משמעית לmap vs for\foreach כנראה זה תלוי במימוש

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Bar  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
24027 הודעות, 7 פידבק
   15:29   15.06.17   
אל הפורום  
  13. כשזה מגיע לביצועים, אתה מודע לזה שאין משמעות לקריאות של קוד, כן?  
בתגובה להודעה מספר 12
 
   כאשר אתה מציג אלגוריתם מסויים, נהוג לדבר על היעילות שלו כפונקציה של גודל הקלט לאלגוריתם.
נהוג לדבר על יעילות של קוד בתור התחלה בהיבט האסימפטוטי, ז"א שלמשל אם אני רוצה למיין מערך מספרים בגודל n, אז האלגוריתם מיון הכי יעיל שניתן להשתמש בו מבצע סדר גודל של n*log2n פעולות. מה זה אומר סדר גודל? זה אומר שהאלגוריתם מבצע c*n*log2n + d פעולות, כאשר c,d הם 2 מספרים קבועים שלא משתנים, ולכן ניתן "להזניח" אותם בהיבט האסימפטוטי.

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

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


He who makes a beast out of himself,
gets rid of the pain of being a man.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
1337Swat 
חבר מתאריך 28.9.05
30852 הודעות
   23:16   18.06.17   
אל הפורום  
  14. למה זה לא מציג לי את התוצאה? זה משגע אותי  
בתגובה להודעה מספר 0
 
   function even(x) {
return x % 2 == 0;
}

var numbers = ;
var res = ;
numbers.forEach(function(number) {
if (even(number)) {
number = number * number + 1;
}
res.push(number);
});
console.log(res);

שמתי את זה וזה לא נותן פלט של המספריםף , מה אני מפספס פה?
תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sza  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 26.4.02
12357 הודעות, 22 פידבק
   08:18   20.06.17   
אל הפורום  
  15. איפה אתה מחפש אותם? בconsole, כן ?  
בתגובה להודעה מספר 14
 


צחי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
1337Swat 
חבר מתאריך 28.9.05
30852 הודעות
   08:20   20.06.17   
אל הפורום  
  16. מכתב  
בתגובה להודעה מספר 15
 
   JSBIN
ו הjsfiddle הזה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sza  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 26.4.02
12357 הודעות, 22 פידבק
   09:07   20.06.17   
אל הפורום  
  17. תלחץ F12 בכרום, תפתח את הלשונית CONSOLE ותראה שם את הפלט  
בתגובה להודעה מספר 16
 


צחי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
1337Swat 
חבר מתאריך 28.9.05
30852 הודעות
   09:44   20.06.17   
אל הפורום  
  18. מעולה תודה! לא חשבתי על זה! :)  
בתגובה להודעה מספר 17
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net