דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. קוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS

קוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS

מתוזמן נעוץ נעול הועבר תכנות
26 פוסטים 6 כותבים 493 צפיות 5 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • yossizY yossiz

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

    ראיתי שיש פונקציית range ב-lodash (כצפוי...) אבל זה מחזיר מערך ולא iterable.
    אצלם גם אם תביא רק ארגומנט אחד הוא מייצג את ה-end.
    ניסיתי להשוות את הקוד שלהם לקוד שלי. אצלם הקוד קצת יותר מסובך בעיקר כי הם מאוד גמישים בצורת הארגומנטים.

    dovidD מנותק
    dovidD מנותק
    dovid
    ניהול
    כתב ב נערך לאחרונה על ידי
    #12

    @yossiz אני מאוד התפלאתי בזמנו שlodash לא עשו כלום בקשר לאיטרטורס
    אשמח גם לדעת על ספריה מסודרת שיש לה את הproposal-iterator-helpers.

    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
    yossizY תגובה 1 תגובה אחרונה
    1
    • רפאלר מנותק
      רפאלר מנותק
      רפאל
      כתב ב נערך לאחרונה על ידי רפאל
      #13

      עד כמה שIterators/Generators שימושיים, סבורני שהגירסה האסינכרונית (AsyncIterator) משמעותית לעין ערוך.
      להלן מימוש של Polling באמצעות Async Generator:

      class StockPricePoller {
        private readonly _url = "https://www.random.org/integers/?num=1&min=1&max=6&col=1&base=10&format=plain&rnd=new";
      
        public async waitFor(thresholdPrice: number): Promise<number> {
          for await (const currentPrice of this.stockPrice())
            if (currentPrice >= thresholdPrice) return currentPrice;
        }
      
        private async *stockPrice(): AsyncGenerator<number> {
          while (true) yield await fetch(this._url).then(x => +x.text())
        }
      }
      

      שימוש:

      const price = await new StockPricePoller().waitFor(5);
      

      הדוגמא לא מושלמת, והיה רצוי להמתין בין הבקשות (Throttling).

      אגב הרעיון קיים גם ב#C ומכונה AsyncEnumerable
      בקוטלין הוא מכונה Asynchronous Flow (דגם היברידי של תכנות אסינכרוני ותכנות ריאקטיבי).

      yossizY תגובה 1 תגובה אחרונה
      4
      • dovidD dovid

        @yossiz אני מאוד התפלאתי בזמנו שlodash לא עשו כלום בקשר לאיטרטורס
        אשמח גם לדעת על ספריה מסודרת שיש לה את הproposal-iterator-helpers.

        yossizY מנותק
        yossizY מנותק
        yossiz
        כתב ב נערך לאחרונה על ידי
        #14

        @dovid הנה משהו מישראלי: https://github.com/DanShappir/Seq
        פעם שמעתי אותו מדבר על הנושא בפודקאסט.
        לא יודע כמה יציב הספרייה. הפודקאסט היה ממש טוב 🙂 (פעם היה פתוח בנטפרי, נראה לי שהם שינו את הדומיין שלהם)
        בלוג שלו בנושא
        (אני מקווה שהרמה הכללית של הביצועים ב-WIX לא משקפים את הרמה שלו....)

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה
        2
        • רפאלר רפאל

          עד כמה שIterators/Generators שימושיים, סבורני שהגירסה האסינכרונית (AsyncIterator) משמעותית לעין ערוך.
          להלן מימוש של Polling באמצעות Async Generator:

          class StockPricePoller {
            private readonly _url = "https://www.random.org/integers/?num=1&min=1&max=6&col=1&base=10&format=plain&rnd=new";
          
            public async waitFor(thresholdPrice: number): Promise<number> {
              for await (const currentPrice of this.stockPrice())
                if (currentPrice >= thresholdPrice) return currentPrice;
            }
          
            private async *stockPrice(): AsyncGenerator<number> {
              while (true) yield await fetch(this._url).then(x => +x.text())
            }
          }
          

          שימוש:

          const price = await new StockPricePoller().waitFor(5);
          

          הדוגמא לא מושלמת, והיה רצוי להמתין בין הבקשות (Throttling).

          אגב הרעיון קיים גם ב#C ומכונה AsyncEnumerable
          בקוטלין הוא מכונה Asynchronous Flow (דגם היברידי של תכנות אסינכרוני ותכנות ריאקטיבי).

          yossizY מנותק
          yossizY מנותק
          yossiz
          כתב ב נערך לאחרונה על ידי yossiz
          #15

          @רפאל מי נתן לך רשות להכניס לפה typescript? undefined

          (אגב, אני מניח שאתה מתכוון ל-polling ולא ל-pulling).

          @רפאל אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

          שהגירסה האסינכרונית (AsyncIterator) משמעותית לעין ערוך

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

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          רפאלר תגובה 1 תגובה אחרונה
          2
          • yossizY yossiz

            @רפאל מי נתן לך רשות להכניס לפה typescript? undefined

            (אגב, אני מניח שאתה מתכוון ל-polling ולא ל-pulling).

            @רפאל אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

            שהגירסה האסינכרונית (AsyncIterator) משמעותית לעין ערוך

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

            רפאלר מנותק
            רפאלר מנותק
            רפאל
            כתב ב נערך לאחרונה על ידי רפאל
            #16

            @yossiz

            מי נתן לך רשות להכניס לפה typescript?

            אני מתנצל, לא העלתי בדעתי שהפורום הוא TypeFree.

            אני מניח שאתה מתכוון ל-polling ולא ל-pulling

            צודק תיקנתי, (בראש שלי זה תמיד Pulling, מלשון משיכה, ולא סקר).

            אבל אני לא מבין למה אתה אומר שזה משמעותית לאין ערוך

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

            Enumrable/Enumerator אכן שימושיים ב#C, בשילוב עם מתודות הLINQ, אולם אינם שימושיים כלל כשלעצמם, לכן לדעתי כל עוד שהIterator Helpers אינם קיימים בJS, אין הרבה מה לעשות עם הIterators/Generators הללו.

            yossizY תגובה 1 תגובה אחרונה
            4
            • רפאלר רפאל

              @yossiz

              מי נתן לך רשות להכניס לפה typescript?

              אני מתנצל, לא העלתי בדעתי שהפורום הוא TypeFree.

              אני מניח שאתה מתכוון ל-polling ולא ל-pulling

              צודק תיקנתי, (בראש שלי זה תמיד Pulling, מלשון משיכה, ולא סקר).

              אבל אני לא מבין למה אתה אומר שזה משמעותית לאין ערוך

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

              Enumrable/Enumerator אכן שימושיים ב#C, בשילוב עם מתודות הLINQ, אולם אינם שימושיים כלל כשלעצמם, לכן לדעתי כל עוד שהIterator Helpers אינם קיימים בJS, אין הרבה מה לעשות עם הIterators/Generators הללו.

              yossizY מנותק
              yossizY מנותק
              yossiz
              כתב ב נערך לאחרונה על ידי
              #17

              @רפאל אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

              אני מתנצל, לא העלתי בדעתי שהפורום הוא TypeFree.

              זה בסדר גמור. רק שזה מעורר בי רגשות אשמה שאני לא עובר להשתמש ב-typescript...

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              רפאלר תגובה 1 תגובה אחרונה
              6
              • dovidD dovid

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

                D מנותק
                D מנותק
                davidnead
                כתב ב נערך לאחרונה על ידי
                #18

                @dovid אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

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

                זה לא מדוייק. ואחת הדוגמאות הכי בולטות והכי מעצבנות עבורי - זה הAPI של הקנבס.

                dovidD תגובה 1 תגובה אחרונה
                1
                • yossizY yossiz

                  @רפאל אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

                  אני מתנצל, לא העלתי בדעתי שהפורום הוא TypeFree.

                  זה בסדר גמור. רק שזה מעורר בי רגשות אשמה שאני לא עובר להשתמש ב-typescript...

                  רפאלר מנותק
                  רפאלר מנותק
                  רפאל
                  כתב ב נערך לאחרונה על ידי רפאל
                  #19
                  פוסט זה נמחק!
                  תגובה 1 תגובה אחרונה
                  0
                  • D davidnead

                    @dovid אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

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

                    זה לא מדוייק. ואחת הדוגמאות הכי בולטות והכי מעצבנות עבורי - זה הAPI של הקנבס.

                    dovidD מנותק
                    dovidD מנותק
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי dovid
                    #20

                    @davidnead אני לא רואה בדוגמה שלך שינוי משמעות לפרמטר באותו המיקום.

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    D תגובה 1 תגובה אחרונה
                    1
                    • dovidD dovid

                      @davidnead אני לא רואה בדוגמה שלך שינוי משמעות לפרמטר באותו המיקום.

                      D מנותק
                      D מנותק
                      davidnead
                      כתב ב נערך לאחרונה על ידי
                      #21

                      @dovid
                      אלו שלושת האפשרויות לקרוא לפונקציה:
                      5100a6d4-31ea-4aa8-b1b8-ee36e8c58f89-image.png
                      הפרמטר השני, שלישי, רביעי, חמישי. המשמעות שלהם משתנה בהתאם לכמה פרמטרים העברת.

                      dovidD תגובה 1 תגובה אחרונה
                      1
                      • D davidnead

                        @dovid
                        אלו שלושת האפשרויות לקרוא לפונקציה:
                        5100a6d4-31ea-4aa8-b1b8-ee36e8c58f89-image.png
                        הפרמטר השני, שלישי, רביעי, חמישי. המשמעות שלהם משתנה בהתאם לכמה פרמטרים העברת.

                        dovidD מנותק
                        dovidD מנותק
                        dovid
                        ניהול
                        כתב ב נערך לאחרונה על ידי
                        #22

                        @davidnead הפרמטר השני הוא תמיד ההמיקום מהנקודה השמאלית העליונה. יש כמובן הבדלים באופן ההבנה והטיפול של הפרמטר אבל עדיין שייך לקרוא לו שם ולזהות את משמעותו הכללית.
                        אני התכוונתי לכזה דבר:

                        void log(message);
                        void log(color, message);
                        

                        זה לענ"ד נגד מנטליות הפיתוח הנפוצה בJS, יש לזה גם משמעות לשמות הפרמטרים בפונקציה המקבלת.
                        בשפות שיש תמיכה בoverloding אז פונקציה נפרדת לגמרי לטיפול בכל צורה, וממילא השמות יכולים להשתנות, אבל בJS פונקציה אחת מטפלת אז היא תתמודד עם מערך של arguments או שמות כמו p1, p2 ותסיק את משמעותם (ולא רק את דרך הטיפול), שזה קוד מאוד לא נחמד לעבודה.

                        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                        D תגובה 1 תגובה אחרונה
                        0
                        • dovidD dovid

                          @davidnead הפרמטר השני הוא תמיד ההמיקום מהנקודה השמאלית העליונה. יש כמובן הבדלים באופן ההבנה והטיפול של הפרמטר אבל עדיין שייך לקרוא לו שם ולזהות את משמעותו הכללית.
                          אני התכוונתי לכזה דבר:

                          void log(message);
                          void log(color, message);
                          

                          זה לענ"ד נגד מנטליות הפיתוח הנפוצה בJS, יש לזה גם משמעות לשמות הפרמטרים בפונקציה המקבלת.
                          בשפות שיש תמיכה בoverloding אז פונקציה נפרדת לגמרי לטיפול בכל צורה, וממילא השמות יכולים להשתנות, אבל בJS פונקציה אחת מטפלת אז היא תתמודד עם מערך של arguments או שמות כמו p1, p2 ותסיק את משמעותם (ולא רק את דרך הטיפול), שזה קוד מאוד לא נחמד לעבודה.

                          D מנותק
                          D מנותק
                          davidnead
                          כתב ב נערך לאחרונה על ידי
                          #23

                          @dovid אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

                          @davidnead הפרמטר השני הוא תמיד ההמיקום מהנקודה השמאלית העליונה

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

                          אם תכתוב

                          ctx.drawImage(src, 50,50)
                          

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

                          ctx.drawImage(src, 50, 50, 100, 100, 0, 0, 100, 100)
                          

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

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

                          dovidD תגובה 1 תגובה אחרונה
                          1
                          • D davidnead

                            @dovid אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

                            @davidnead הפרמטר השני הוא תמיד ההמיקום מהנקודה השמאלית העליונה

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

                            אם תכתוב

                            ctx.drawImage(src, 50,50)
                            

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

                            ctx.drawImage(src, 50, 50, 100, 100, 0, 0, 100, 100)
                            

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

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

                            dovidD מנותק
                            dovidD מנותק
                            dovid
                            ניהול
                            כתב ב נערך לאחרונה על ידי dovid
                            #24

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

                            • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                            • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                            D תגובה 1 תגובה אחרונה
                            1
                            • D מנותק
                              D מנותק
                              davidnead
                              כתב ב נערך לאחרונה על ידי
                              #25

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

                              $.get
                              

                              שנראית בפנים כך:

                              function( url, data, callback, type)
                              

                              הארגומנט הראשון הוא תמיד URL, השני יכול להיות אובייקט body ויכול להיות callback, וכו'. תלוי כמה פרמטרים שלחת.

                              תגובה 1 תגובה אחרונה
                              2
                              • dovidD dovid

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

                                D מנותק
                                D מנותק
                                davidnead
                                כתב ב נערך לאחרונה על ידי
                                #26

                                @dovid אמר בקוד חמוד/רע/איום ליצירת רשימת מספרים ב-JS:

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

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

                                תגובה 1 תגובה אחרונה
                                0
                                תגובה
                                • תגובה כנושא
                                התחברו כדי לפרסם תגובה
                                • מהישן לחדש
                                • מהחדש לישן
                                • הכי הרבה הצבעות


                                • 1
                                • 2
                                בא תתחבר לדף היומי!
                                • התחברות

                                • אין לך חשבון עדיין? הרשמה

                                • התחברו או הירשמו כדי לחפש.
                                • פוסט ראשון
                                  פוסט אחרון
                                0
                                • דף הבית
                                • קטגוריות
                                • פוסטים אחרונים
                                • משתמשים
                                • חיפוש
                                • חוקי הפורום