Рубрики
Без рубрики

Детская акула, с карри и сочинение

Детская акула, Ду Ду Ду с карриными функциями и композицией Я прокручивался на LinkedIn … Теги с JavaScript, начинающими, функциональными.

Я прокручивался на LinkedIn и увидел пост от кого-то, кто сказал, что им дали проблему «детской акулы» в интервью, и что вопрос «Baby Shark» – это вопрос интервью-интервью «Baby Shark». Я начинаю смотреть в функциональные концепции программирования. Условия кусочков LEGO; Меньшие функции, которые накапливаются, чтобы решить проблему.

Некоторые вещи, которые я думаю, полезно знать подходящее:

Функции карри

Определение: Разбитая функция, которая принимает несколько аргументов и возвращает ряд функций, которые имеют только один вход, и возвращает вывод

Неверная функция

Функция Add (x, y) {return x + y}

В этой функции ожидается, что оба аргумента будут иметь значение или, возможно, вам придется сделать если (x && y) перед возвратом вывода. Какой ваш выход будет не всегда одинаковым или точным

Функция Curry

function add(x) {
    return function (y) {
        return x + y;
    }
}
// equivalent to:
const add = x => y => x + y

Написать таким образом, функция всегда будет возвращать что-то предсказуемое; Функция, если не все аргументы были поставлены, или оценивающее выражение Выгоды : Проблематичность Тяжественность Необычные побочные эффекты -Дереги выполнения до тех пор, пока х и у не предусмотрены и избегание необходимости неимскавать если (x && y) задержать Вернуть х + y -Аемость для создания Частичные приложения (ниже)

const addTwo = add(2); // console.log(addTwo) should print a Function type
const addThree = add(3)(5); // 8
console.log(addTwo(10)) // 12
// Note: addTwo and addThree are "partial applications" as a result from currying

-Пасние приложения паритиальных или функция Curry в HOCS (компоненты более высокого порядка), как карта и уменьшать

[1,2,3,4,5].map(val => console.log(addTwo(val))
// 3 4 5 7

Компоновность 🎹🎸🎼.

Определение: Принимая вывод функции и используя это для ввода функций Забрала мне это ……: Если мы подумаем о песне, мы также можем назвать это композицией. Вы (dev) – это его композитор. Композитор направляет оркестр, воспроизводимый композицию, которая может быть сделана из разных инструментов, но все они хорошо подходят для воспроизведения этой композиции. Функциональная композиция в условиях FP, объединяет разные функции, чтобы составить вывод.

Предварительный состав:

const scream = str => `${str}!`; // append an ! to any string we pass
const reallyShout = str => str.toUpperCase(); // use toUpperCase String method to do hi --> HI
const repeat = xTimes => str => str.repeat(xTimes); // use repeat String method to repeat x number of times

console.log(repeat(5)(reallyShout(scream(hello)))); // Execution occurs Right to Left: 
// hello! --> HELLO! --> HELLO! HELLO! HELLO! HELLO! HELLO!

Эта последняя строка в порядке для этого примера, но она может стать большим и супер вложенным и может стать трудным для отладки.

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

const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x)
const screamAndShoutAndRepeat = x => compose(
    repeat(x),
    shout,
    scream
);

console.log(screamAndShout) // Function because it's a partial application. It hasn't received argument x
console.log(screamAndShout(4)('hi')) // HI! HI! HI! HI!

Детская акула упражнения

Детская акула, Ду Ду Ду Ду Ду Детская акула, Ду Ду Ду Ду Ду Детская акула, Ду Ду Ду Ду Ду Детская акула! Мама акула, Ду Ду Ду Ду Ду Мама акула, Ду Ду Ду Ду Ду Мама акула, Ду Ду Ду Ду Ду Мама акула! Папа Акула, Ду Ду Ду Ду Ду Папа Акула, Ду Ду Ду Ду Ду Папа Акула, Ду Ду Ду Ду Ду Папа акула! Бабушка Акула, Ду Ду Ду Ду Ду Бабушка Акула, Ду Ду Ду Ду Ду Бабушка Акула, Ду Ду Ду Ду Ду Бабушка акула! Дедушка акула, Ду Ду Ду Ду Ду Дедушка акула, Ду Ду Ду Ду Ду Дедушка акула, Ду Ду Ду Ду Ду Дедушка акула!

Так что мы знаем об этих лирике …

  • Печатает тип акулы
  • Печатает “Ду” 6 раз
  • Повторяет шаги 1 и 2 3 раза
  • Восклицает тип акулы
  • Продолжает шаги 1-4 с различными типами акул

Давайте строим функции, чтобы сделать вышеупомянутые части (без определенного порядка) … Шаг 1: Храните все различные типы акул в массиве. Мы будем повторять этот массив, повторяя шаги с 1 по 4 каждый раз

const sharks = ["Baby", "Mommy", "Daddy", "Grandma", "Grandpa"];

Шаг2: У нас есть типы акул, теперь мы должны создать акулу

const createShark = type => `${type} Shark`; // console.log(createShark('Foo')) outputs: Foo Shark

Шаг 3: Созданная акула либо добавляется, либо предложена с помощью , или Действительно В зависимости от того, на каком шаге мы находимся в печати лирики, и нам также нужно убедиться, что каждая строка имеет новый символ линии

const pause = str => `${str},`; // pause('foo') --> foo,
const exclaim = str => `${str}!`; // exclaim('bar') --> bar!
const addNewLine = str => add('\n')(str); // or str.concact('\n')

Шаг 4: Нам понадобится какой-то метод, который принимает в строке и повторяет его. Нам нужно, чтобы повторить слово «doo» и повторить первую строку x количество раз (Baby Arand, Doo Doo Doo Doo Doo Doo 3x)

const repeat = xTimes => str => str.repeat(xTimes); 
const repeatDoo = repeat(6)("doo"); // doo doo doo doo doo doo doo

Если бы мы были распечатаны тексты песен без Используя композитивность и использование только функций, которые мы создали выше, это будет выглядеть что-то подобное:

const lyrics = sharks.reduce(function(acc, shark) => {
    const lyric = add(repeat(4)(addNewLine(pause(createShark(shark) + repeatDoo))))(addNewLine(exclaim(createShark(shark)));
    return acc + lyric
}

Вроде не самый лучший. Кто-нибудь читал это, не знал бы сразу, что происходит. Им, возможно, придется бросить несколько консолей .Logs/точки останова, чтобы увидеть, что происходит при отладке

Все концепции для решения для детского акула:

const append = a => b => add(b)(a);

const firstVerse = x => compose(
    repeat(x),
    append(repeatDoo),
    pause,
    createShark
);


const endOfVerse = compose(
    addNewLine,
    exclaim,
    createShark
)

const lyric = sharks.reduce(function (acc,shark) {
    const lyric =  add
    (firstVerse(4)('Test'))
    (endOfVerse(shark));
    return acc + lyric
}, "")

Обратная связь приветствовала и оценена 🦄 Отличные ресурсы: https://github.com/getify/functional-light-js https://egghead.io/courses/just-enough-functional-programming-in-javascript

Оригинал: “https://dev.to/nhidtran/baby-shark-doo-doo-doo-doo-with-currying-and-composing-24cn”