SHOW:
|
|
- or go back to the newest paste.
| 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 | - | let array = new Array(5); // заповнила масив значеннями за допомогою циклу |
| 12 | + | /* о, прикольно, функції то рівень! Ну в цієї задачі можна було б обійтися.. але круто, що застовували! Що до іменувань.. ви ж знаєте , що в програмуванні всього дві проблеми? Це вдалі іменуванні, валідація кешу, та помилка на одиничку.) |
| 13 | Так ось, функції, які щось перевіряють та дають булєву відвовідь (тру чи фолс) прийнятно іменувати так, щоб їх відповідь (ну що вони повертають) семантично випливало з назви, тобто якщо функція перевіряє чиВходитьЧислоДоМасиву (чиМассивМіститьЧисло) то звчично так | |
| 14 | - | let city = prompt("Введи назву міста " + (i + 1));
|
| 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 | - | let arrayLength = array.length; |
| 17 | + | |
| 18 | Доречі чим меньше сама функція - і відповідно вона буде виконувати тільки свою маленьку справу - тим також краще. Іменувати легше, і семантика зберідеться й не буде неочікуванних сайд ефектів, коти перевірив чи масив містить елемент викликавши функцію, а вона не тільки перевірила, а й ще відсортувала масив, або навіть додавла цей елем, бо ж його там не було бідненького.. не треба так, одна функція - одна відповідальність.) Ну це я не про вашу, ваша молодець.) | |
| 19 | motherCity - краще nativeCity мабуть.. але що ще важливо - така семантично коректна назва буде круто читатися в вашому коді тобто в контексті завдання про міста та рідне місто, а в контексті функції яка має перевірити чи містить якийся масив якийся елемент - це прям зайва назва, в контексті такої функії іменування будуть массви та елемент, все. Бо ж ми можемо її викликати щоб перевірити чи містить масив попуг нашого Кєшу, наприклад. motherCity Кєша..))) | |
| 20 | ||
| 21 | Про передачу до параметрів функцій за значенням та за посиланням знаєте? Напркилад масив передається за посиланням, тобто якщо ви йог всередені функції змінете (навіть нічого не повертаючи з неї) то змінете ви сам масив який передали до неї. А змінна примітивна передаєтьс яз азначенням, тобто на неї не подіять зміни в функції, хіба що повертати їй нове значення ретурном та присвоювати при виклику функціі : змінна = перемножНаДва(2), перемножНаДва(н) {return н * 2}.
| |
| 22 | */ | |
| 23 | - | } |
| 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 | Гарного коду.) */ |