Timkor

triangleDecomposition

Feb 17th, 2021 (edited)
1,040
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* пусті рядки в коді варто використовувати для відокремлювання деяких його фрагментів, але не варто використовувати їх занадто часто.
  2. ***
  3.  **
  4.   *
  5. */
  6.  
  7. let i = size;                                // while
  8. let j = size;
  9. let symb = '*';
  10.  
  11. while (i > 0) {
  12.     while (j > 0) {
  13.         if (i < j) {
  14.             symb = ' ';
  15.         }
  16.         console.put(symb);
  17.         symb = '*';
  18.         j--;
  19.     }
  20.     console.log();
  21.     i--;
  22.     j = size;
  23. }
  24. /* Щодо ефективності кода:
  25. - у вкладеному циклі ви перевіряєте чи не змінити зірку на пробіл, ця перевірка відбувається кожну ітерацію;
  26. - кожну ітерацію ви присвоюєте змінній symb зірку, навіть якщо вам все ще потрібні пробіли, або якщо вона і так дорівнює зірці;
  27. це зайві операції, вони знижують ефективність та швидкодію коду. Але ще вони знижують читабельність. Обговоримо декомпозицію - тобто розділення коду на частини, що кожна робить свою справу. Які частини рішення задачи ми маємо: виведення певної кількості рядків, виведення в кожному рядку пробілів, виведення в кожному рядку зірок. Частину вводу розміру  - першу частину, пропустимо. Такий розділ - декомпозує складну задачу на простіші, полегшує написання та читання коду.
  28. Кожну дію можна ще назвати відповідальністю - тобто кожна логічна частина коду має свою відповідальність. Бажано, щоб розділення задачи та розділення коду співпадали, тобто одна частина коду - має одну відповідальність, виконує одну просту підзадачу.
  29.   За що відповідає зовнішній цикл - за кількість рядків (він їх рахує та переводить) , ще в ньому є рядки коду з підготовки значень змінних для виводу пробілів та зірок, та скоріш ці строки віднесимо до частин коду відповідальних за виведення пробілів та зірок . За що відповідальний вкладений цикл - за виведення пробілів ,та коли треба зірок. Відчуваєте ускладнення? Він відповідає і за виведення пробілів і за виведення зірок - тобто він вдвічі складніший ніж має бути.
  30.   Звісно, на доволі простій задачі ми легко втримуємо контекст подій у голові, тому і реалізувати його не дуже складно. Для конкретного рішення конкретної задачи це норм. Але якщо задача потім змінеться, наприклад на таку: вивести трикутник зірок
  31.   ++*///
  32.  ++**//
  33. ++***/
  34.  
  35. /*
  36. щоб перед зірками були 2 плюси, а після зірок були слеши, при чому їх кількість має бути від Н до 1, як у першому трикутнику. А ще в умові буде, що кількість плюсів можна задавати, не обов'язково 2, і що конкретно задані символи: плюси , зірки, слеши - можливо це будуть інші символи,  що теж можна буде задавати. Чи пропорційно ускладниться код якщо не розділити відповідальність за вивід кожного з мисволів , а лишити одну частину коду відповідальною за виведення всіх символів лише додавши додаткових умов?
  37.  
  38.   Сподіваюсь мені вдалося вас залякати)) Ні , не залякати звісно, а переконати, що краще розділити вкладений цикл відповідно до кількості підзадач: пробіли окремо, зірки окремо. Тоді умова стане не потрібна, постійне присвоювання зірки як і змінна теж,  а головен код буде простий та гнучкий до змін та розширення -  підтримуємий (maintainable).
  39.  
  40.   Приклади коду можна подивитися (бажано після того як закінчити свій варіант) у рев'ю іншого студента: https://codeshare.io/5PyrpX
  41.  
  42. Якщо сервіс codeshare вам буде зручніший за pastebin  - маємо спроби використовувати його для рев'ю, має і переваги і недоліки, приєднуйтесь до тестування - скидайте код на рев'ю через нього. В codeshare можна одночасно редагувати код за посиланням, тобто у відповідь на ваш код ви отримаєте в дискорді емоджі з рукостисканням, що буде значити, що рев'ю проведено, зміни внесені.
  43.  
  44. Гарного коду!
  45.  
  46. ps якщо буде змога, та буде зручно вам провести рев'ю коду з тієї теми, що ви вже опанували - зробить це, якщо будуть питання щодо рев'ю - можете написати у приватні. Якщо бажання порев'ювати не виникає  - добре, це зараз не головне, а теж щось на кшталт експерименту. Вважаю що на початку навчання всі ми хвилюємось щоб не порадити іншим щось не те. Це норм, якщо щось підкажете не зовсім так, як хтось більш досвідчений, таке трапляється завжди і скоріш за все буде виправлено найближчим часом, а може навіть не буде сприйнято. Цінний сам обмінм думками,  досвідом, варіантами, передати інший погляд на рішення. До того ж культурне спілкування людей об'єднаних спільною метою мотивує та додає досвіду у комунікації.
  47. */
  48.  
  49.  
Add Comment
Please, Sign In to add comment