הבעיה היא לא הgoto
-
@חוקר
אולי אפשר את התפריט כעץ של מערכים
ולהכניס את הספרות להקשה בצאצאים של המערך
דהיינו בתפריט היעד
ואז הוא יעשה לולאה שמחפשת את תפריט המתאים
למשל אם הקיש 3 וימצא צאצא עם alise 3-5 אז הוא יעבור לתפריט הנ"ל
אפשר גם 3,4,5 וכדומה
אפשר גם להשתמש בregexclienttype: { type: 'input', name: 'clienttype', message: 'Enter firstname ..', acte:{ yeshivaCode:{ type: 'input', alise: '1-2', message: 'Enter Code ..', } }ColleCode:{ type: 'input', alise: '3-4', message: 'Enter Code ..', }
יתכן מאוד שאני סתם מקשקש
אבל אני מנסה לעזור בכל זאת -
@nigun
אני חוזר ואומר את הנקודה.
אני לא חושב שנכון מצידי לעבוד עם מערך בראש הקוד.
יש לי המון פעולות לביצוע בין לבין.
למשל בהקשת תאריך, אני מעבד את התאריך שהמאזין הקיש בפורמט 18052020 לאובייקט תאריך שממנו אני מקבל מחרוזת בשם 20200518 שהשאלה הבאה בתור משמיעה נתון מתיקיה ששמה כשם התאריך שהוקש בפורמט המעובד, אז אני לא יכול לקבוע זאת בראש הדף.
אני חייב שהקוד יהיה סיפור ויובן בכל שלב מה השלב הקודם והשלבהבא -
@nigun אמר בהבעיה היא לא הgoto:
@חוקר
אז תוסיף אובייקט במערך שמכיל פונקציה
שתעבד את הנתוניםאת הסיפור אבל הוא לא יספר.
אתה צודק שדברים קבועים ניתן להכניס ישירות הגדרה שאני רוצה שיחזיר לי את הנתון בפורמט תאריך המבוקש.
אבל כל העבודה והרעיון והאתגר לטעמי בפיתוח מערכות טלפוניות הוא שבקוד עצמו אתה רואה שלב אחר שלב את מה שמושמע בטלפון.
לא שבראש הדף יש לי רמזים על כל מיני תרחישים -
@חוקר אתה טועה במטרה.
אתה מחפש שיהיה קל להבין את הזרימה, זה באמת אתגר מעניין וצריך להקדיש לזה מחשבה.
אנחנו מחפשים שלא תכתוב קוד לאימות של מספר מעל X, קוד למעבר לשתי שלבים אחורה וכו' כשכל זה ניתן להצהרה בצורה מתומצתת וקלה לתחזוקה.
אני לא מבין למה אתה מתייחס ב"ראש הדף", אנחנו מדברים אפילו על מידע שיכול להיות בקובץ או במסד נתונים שלפיו כל השיחה תתבצע. -
@חוקר אמר בהבעיה היא לא הgoto:
הקושי שלי הוא כזה, ליצור בתחילת הקוד אובייקט עם כל סוגי הסיטואציות שאולי יהיו בדף בתת תפריט של תת תפריט, והכל יככב לי בראש הקוד, הוא מאוד מאוד מסורבל, ויזיק יותר משיועיל, כי אני חייב לראות מול העיניים בכל שלב את השלב שלפניו.
דוגמא פשוטה לבעיה, אחד הערכים שאני משתמש הוא איזה ספרות לאפשר למאזין להקיש בתפריט/השאלה הנוכחית, ואם עשיתי תפריט שבתחילת כתיבת הקוד חשבתי לתת לו לבחור את האפשרויות 1258 בלבד, ולאחר כתיבת הקוד אני מחליט להוסיף את אפשרות 7 לתפריט, אז אני מוסיף תנאי באם ההקשה שווה 7 מה לבצע, אך אני חייב לזכור להוסיף למקשים המותרים את 7 וס"ה יהיה 12578, וכן לשנות בהודעת התפריט את החלק הנוסף.
אתה לא מתאר קשיים שיערמו בפניך כשתעבור לתכנות מונחה עצמים, אתה מתאר את ההרגלים שתצטרך לשנות. וזה הבדל עצום.
אתה מורגל לחשוב בראש פרוצדורלי (מסתמא כמו כל מי שהתחיל את דרכו ב PHP JS והאחיות שלהן) ונדמה לך שיותר קריא לקרוא סיפור ארוך, תמהני אם הוצרכת פעם לתחזק קוד של מישהו אחר או קוד שלך כמה חודשים אחרי שכתבת אותו.אם תתרגל לחשוב בראש של אובייקטים, תראה כל שיחה טלפונית כאובייקט, והתפריטים הם עץ טבלאות, כל שאלה היא רשומה בטבלה, כל תשובה נרשמת באובייקט, כל תנועה בין תפריטים ושאלות היא מתודה. כשתדרש לשנות את נוסח השאלה בנקודה מסויימת או להוסיף אפשרויות הקשה תיגש ישירות לנקודה הנכונה ותשנה אותה נקודתית.
@חוקר אמר בהבעיה היא לא הgoto:
אם המערך יהיה למעלה, אני יסתובב הלוך ושוב ואני ישאיר חלקים לעדכון אח"כ ואני ישכח וכו'.
נראה לי שהנכון הוא לייחד לכל תפריט או תת תפריט קובץ משלו, ולאחסן בו את האובייקטים של השאלות שלו, ובקובץ הראשי לקרוא לכולם ולהריץ את התפריט הראשי, והזרימה בין התפריטים תתבצע לפי ההגדרות הפנימיות של כל תפריט
-
@יוסף-בן-שמעון אני קצת יותר מתחבר לאלו שרוצים לראות סיפור במערכת טלפונית, ובצורה הזו
אולי שוה באמת לעשות ניסיון, השאלה אם הצר שווה בנזק המלך, בגלל שהמערכת מתנהלת בצורה מסויימת.
יצא לי לתחזק קוד של מישהו אחר בטלפוניה.
היה קל להבין מה הוא רצה בכל שלב.... כי זה ממש קוד שכתוב כמו סיפוראבל באמת שווה לבדוק גם את הצד השני...
-
אמ:לק
אני פתרתי את הסיפור של מערכת בימות המשיח.
יש לי עכשיו קוד רציף, קל, זורם.
https://www.npmjs.com/package/yemot-routerאה, בנוד.
לא בPHP...const express = require("express"); const yemot_router = require("yemot-router"); const port = 3000; const app = express(); const y = yemot_router(); y.add_fn(async (call) => { let massage = [{ type: "text", data: "היי, תקיש 10" }]; let r = await call.read(massage); console.log(r); massage = [{ type: "text", data: "הקשת " + r + " תקיש 1 ונסיים סיפור" }]; call.id_list_message(massage); }); app.use("/", y); app.listen(port, () => { console.log("lisen in port", port); });
בבקשה הראשונה, הקוד מתחיל.
הוא מושהה עד הבקשה השנייה.
ואז לשלישית, וכו. -
@MusiCode אמר בהבעיה היא לא הgoto:
אני פתרתי את הסיפור של מערכת בימות המשיח.
יש לי עכשיו קוד רציף, קל, זורם.
https://www.npmjs.com/package/yemot-routerכל הכבוד!
ואהבתי את ההערות שכתבת -
@MusiCode
מה שעשתי בסוף בFastAGI
הקמתי עוד שרת DEV בתיקיה אחרת שמאזין לפורט אחר
ושם אני עושה את הפיתוח,ניסויים וכו'.
וכשיש לי שקט בשרת פרודקשן אני אני מעדכן את כל שנויים עם GIT.
אמנם זה אפשר להחזיק שרת פרוקסי שיעביר את כל שיחות לשרת DEV עד שיגמרו כל השיחות בשרת פרודקשן
אבל אצלי מחזיק מידע משותף בין השיחות בזיכרון
כך שזה לא עוזר לי, ואין לי מה לעשות אני צריך לחכות לשקט בשרת פרודקשן. -