Timkor

cities

Jul 20th, 2021 (edited)
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Задача про міста
  2. // https://zero.p2p.shpp.me/tasks/4_0_goroda.html
  3.  
  4. function arrayIncludes(array, arrayLength, motherCity) { // створила функцію для знаходження збігів
  5.     for (let i = 0; i < arrayLength; i++) {
  6.         if (motherCity == array[i]) {
  7.             return true;
  8.         }
  9.     }
  10.     return false;
  11. }
  12. /* о, прикольно, функції то рівень! Ну в цієї задачі можна було б обійтися.. але круто, що застовували! Що до іменувань.. ви ж знаєте , що в програмуванні всього дві проблеми? Це вдалі іменуванні, валідація кешу, та помилка на одиничку.)
  13. Так ось, функції, які щось перевіряють та дають булєву відвовідь (тру чи фолс) прийнятно іменувати так, щоб їх відповідь (ну що вони повертають) семантично випливало з назви, тобто якщо функція перевіряє чиВходитьЧислоДоМасиву (чиМассивМіститьЧисло) то звчично так
  14. isArrayIncludeNumber(array, number) , блін рагульне іменування вийшло, можна спростити до isNumberIncludes(number, array). Теж рагульнувато, але см принцип можна вивести: is, has, для булевих функції саме те, що допомагаэ читати код. Доречі в яп часто вже є подібний функціонал, наприклад в js є includes , і не питайте чого в них така назва... )) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
  15.  
  16. Ще про функції, чим менше параметрів  - тим краще, більше 4 - зашквар повний, три  - ну тільки якщо реально потрібно, а увас один зайвий, можна скоротити до стандартних двох.))
  17.  
  18. Доречі чим меньше сама функція - і відповідно вона буде виконувати тільки свою маленьку справу - тим також краще. Іменувати легше, і семантика зберідеться й не буде неочікуванних сайд ефектів, коти перевірив чи масив містить елемент викликавши функцію, а вона не тільки перевірила, а й ще відсортувала масив, або навіть додавла цей елем, бо ж його там не було бідненького.. не треба так, одна функція - одна відповідальність.) Ну це я не про вашу, ваша молодець.)
  19. motherCity - краще  nativeCity мабуть.. але що ще важливо - така семантично коректна назва  буде круто читатися в вашому коді тобто в контексті завдання про міста та рідне місто, а в контексті функції яка має перевірити чи містить якийся масив якийся елемент - це прям зайва назва, в контексті такої функії іменування будуть массви та елемент, все. Бо ж ми можемо її викликати щоб перевірити чи містить масив попуг нашого Кєшу, наприклад. motherCity Кєша..)))
  20.  
  21. Про передачу до параметрів функцій за значенням та за посиланням знаєте? Напркилад масив передається за посиланням, тобто якщо ви йог всередені функції змінете (навіть нічого не повертаючи з неї) то змінете ви сам масив який передали до неї. А змінна примітивна передаєтьс яз азначенням, тобто на неї не подіять зміни в функції, хіба що повертати їй нове значення ретурном та присвоювати при виклику функціі : змінна = перемножНаДва(2), перемножНаДва(н) {return н * 2}.
  22. */
  23.  
  24. let array = new Array(5); // заповнила масив значеннями за допомогою циклу, масиви іменуйте в множині того, що вони зберігають - тут міста було б норм.
  25. for (let i = 0; i < array.length; i++) {
  26.     let city = prompt("Введи назву міста " + (i + 1)); // UI !!! ))
  27.     array[i] = city;
  28. }
  29. /*  в завданні 10, розумію, що задовбалися вводити, можна для тесту захардкодити масивчит, щоб не вводити кожного разу,
  30. let array = ['Dnipro', 'Kyiv', 'Donetsk', 'Uzhhorod', 'Zaporizhzhia', 'Ivano-Frankivsk',  'Lviv', 'Odesa', 'Poltava', 'Rivne',]
  31. До речі, остання кома допускається , навіть назву має - висяча. А що до введення вручну.. то я б на Запоріжжі зламався б))
  32. */
  33. let arrayLength = array.length; // оптимізація??
  34. let motherCity = prompt("Введи назву рідного міста");
  35. if (arrayIncludes(array, arrayLength, motherCity) == true) { // умова і виведення результатів в одному блоці
  36.     console.log("Я знаю твоє місто");
  37. } else if (arrayIncludes(array, arrayLength, motherCity) == false) {
  38.     console.log("Я НЕ знаю твоє місто");
  39. }
  40.  
  41. /* можна записати простіше */
  42. if (arrayIncludes(array, arrayLength, motherCity)) { // == true прибрав, бо іф саме очікує тру чи фолс у собі, а це і повертає ваша функція
  43.     console.log("Я знаю твоє місто");
  44. } else { // if (arrayIncludes(array, arrayLength, motherCity) == false)  навіщо ж знову всі міста перебирати, якщо не тру, то точно фолс..
  45.     console.log("Я НЕ знаю твоє місто");
  46. }
  47.  
  48. /* не впевнений, що це буде для вас корисним, але якщо це не займе багато часу вважаю корисним закодити цю ж задачку без функції, це не забаганка, там є нюанс, що може статися в пригоді у подальшій карїєрі. А взагалі функції - так, завжди добре! І щоб не повторювати свій код, і декомпозувати його, і додати семантики в нього, коли читаєшь наче прозу!)
  49. Гарного коду.) */
Add Comment
Please, Sign In to add comment