Вопрос №3048 от пользователя Алексей Владимирович в уроке «Функции и побочные эффекты», курс «Основы программирования»

Алексей Владимирович

Почему так не работает?

export default (str)=>{
  let acc = '';
  for (let i=0; i<strings.length(str); i++){
    if(str[i] === ' '){
    return strings.toUpperCase(str[i+1]);
    }
    else if(str[0]){
    return strings.toUpperCase(str[i]);
    }
    acc = acc + str[i];
 } // for
} // func

Вывод: make: Entering directory `/usr/src/app' babel-node --presets=es2015 test.js

assert.js:89 throw new assert.AssertionError({ ^ AssertionError: 'H' == 'Hello, World!' at Object. (test.js:4:8) at Module._compile (module.js:413:34) at loader (/usr/local/lib/node_modules/babel-register/lib/node.js:126:5) at Object.require.extensions.(anonymous function) as .js at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12) at Function.Module.runMain (module.js:447:10) at /usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:161:27 at Object. (/usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:162:7) at Module._compile (module.js:413:34) make: *** [test] Error 1 make: Leaving directory `/usr/src/app'

14 0

Kirill Mokevnin

  1. Воспользуйтесь пожалуйста возможностями нашего редактора для форматирования кода. В текущем виде его тяжело разбирать.

  2. Я не могу ответить на ваш вопрос без вывода, который вам показывают тесты и в котором есть следующая информация: с какими параметрами была выполнена функция, какой результат она вернула и какой результат ожидался.

0

Kirill Mokevnin

AssertionError: 'H' == 'Hello, World!'

Справа это то что ожидалось, слева это то что вернула ваша функция: H.

Подсказка: return прекращает выполнение текущей функции и отдает переданное значение наверх.

В выводе есть указание на то место где собственно сработала проверка: (test.js:4:8). Посмотрите на 4 строчку файла test.js, возможно вам станет понятнее как используется ваша функция.

0

Алексей Владимирович

Так без ретёнов то же самое. Я туда смотрел и раньше. С чего сейчас понятнее должно стать? strings.toUpperCase(str[i+1]) - это вообще "валидное" исполнение, можно наперёд заявлять, что буква должна стать заглавной?

0

Kirill Mokevnin

С ошибками надо разбираться постепенно. То что без ретернов тоже самое, это уже совершенно другая история связанная с другой проблемой.

Я ее не очень хорошо осветил в видео про строки, поэтому добавил текстовую часть. Посмотрите под видео https://ru.hexlet.io/courses/programming-basics/lessons/string/theory_unit должно стать понятнее. После этого можно будет двигаться дальше и разбираться со следующими сложностями.

0

Алексей Владимирович

Полдела сделано. Ещё б объяснили как это обходить =)

0

Kirill Mokevnin

Вам нужно собирать новую строчку, а не пытаться менять старую. Для этого можно использовать конкатенацию.

0

Kirill Mokevnin

Оказывается мы забыли добавить практику к уроку "строки" и видимо это сказалось. Сейчас практика есть и на ней можно отработать более простую работу со строками.

0

Алексей Владимирович

Я, наверное, оставлю это тут. Потому что решение учителя - это ай-яй-яй. Еле понял. Столько вариантов перебрал прежде, чем понял его код.

// BEGIN (write your solution here)
export default (str)=>{
  let acc = '';
  let res = '';
  for (let i=0; i<strings.length(str); i++){

    if(i === 0 || acc === ' '){
    res = res + strings.toUpperCase(str[i]);
    acc = strings.toUpperCase(str[i]);
    }
    else {
    res = res + str[i];
    acc = str[i];
    }

  } // for
    return res;
} // func
// END
0

Kirill Mokevnin

В маркдауне для выделения блока кода используется три апострофа до блока и три после, а у вас только по одному и поэтому все время съезжает код.

0

Kirill Mokevnin

То решение которое вы увидели, это автоматное программирование. Чуть подробнее о нем можно узнать в нашем вебинаре.

0

Алексей Владимирович

Не знаю что такое маркдаун =) Я просто нажал кнопочку "code", после чего отобразилось code text here. Вот там я и вставил код.

0

Алексей Владимирович

Поставил по три апострофа, всё равно так же получилось...

0

Kirill Mokevnin

markdown это язык разметки, он используется во множестве редакторов и в том числе здесь. Вы можете через кнопки вызывать его конструкции, а можете просто напрямую, если знаете формат. Он очень простой (проще html) https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet

С тремя апострофами история такая, нужно чтобы они были на отдельной строчке, причем как в начале, так и в конце. А кнопочка code вставлят одиночные апострофы, такое выделение используется когда нужный кусок является частью другой строки пример.

Вот пример с тремя

// js code here
0

Алексей Владимирович

С апострофами получилось. А видео я уже видел. Но пока непонятно там. Я ещё не знаю, что такое не то что ООП, а что такое объект, класс и т.п. Тут для начинающих об этом не было.

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев