Ответы пользователя по тегу Программирование
  • Какой из вариантов правильнее для функционального программирования JS?

    pm_wanderer
    @pm_wanderer
    junior-HTML
    Чтобы увидеть преимущества функционального подхода, лучше написать пример немного другим образом. Сейчас у Вас в общем ничего функционального там и нет (наличие функций !== ФП):

    function formatter(item) {
        return "0" + item.toString();
    }
    
    function validator(number) {
        if (typeof number !== "number") {
            throw new Error("invalid argument: Number expected");
        }
        return number;
    }
    
    function formatData(array, formatter, validator) {
        return array.map(item => formatter(validator(item)));
    }
    
    alert(formatData([1, 2, 3], formatter, validator));


    PS: можно заморочиться и спроектировать более универсальные функции, но в качестве примера и так сойдет)
    Ответ написан
    6 комментариев
  • Как лучше решить задачу на поиск ближайшего числа?

    pm_wanderer
    @pm_wanderer Автор вопроса
    junior-HTML
    Вот решение, которое я нашел (если кому понадобится в будущем):

    /**
         * @param {Array} settings.arr
         * @param {Number} settings.valueToFind
         * @param {Function} settings.comparator
         *
         * @returns {Number|undefined}
         */
        function findClosest(settings) {
    
          var lo                 = -Infinity,
                hi                 = Infinity,
                arr                = settings.arr,
                valueToFind = settings.valueToFind,
                comparator  = settings.comparator,
                result;
    
            for (var i = 0; i < arr.length; i++) {
    
                if (arr[i] <= valueToFind && arr[i] >= lo) {
                    lo = arr[i];
                    continue;
                }
    
                if (arr[i] >= valueToFind && arr[i] <= hi) {
                    hi = arr[i];
                }
            }
    
            result = comparator(lo, hi, valueToFind);
    
            return isFinite(result) ? result : undefined; // or false
        }


    Вот так выглядит объект settings c четырьмя возможными компараторами:

    var comparator1 = function(lo, hi, valueToFind) {
            return lo; // or hi
    };
    
    var comparator2 = function(lo, hi, valueToFind) {
            var result = lo; // or hi
    
            switch (true) {
                case valueToFind - lo < hi - valueToFind:
                    result = lo;
                    break;
                case valueToFind - lo > hi - valueToFind:
                    result = hi;
                    break;
            }
    
            return result;
    };
     
    var settings = {
            arr: [1, 5, 10, 8, 5, 13],
            valueToFind: 7,
            comparator: comparator2
    };


    И сам вызов функции:

    alert(findClosest(settings));

    PS:
    Вместо false, в случае когда результат не определен, я решил возвращать undefined, так как это значение ближе по семантике.
    Ответ написан
    Комментировать
  • Как эффективнее всего изучать ЯП?

    pm_wanderer
    @pm_wanderer
    junior-HTML
    Запилил короткий тест, чтобы можно было примерно оценить насколько эффективно будет проходить ваше обучение программированию и сколько это займет по времени:

    # ваш возраст менее 25 лет? (1 балл)
    # можете ли вы читать техническую литературу на английском языке? (2 балла)
    # знаете ли вы, что такое наследование, полиморфизм и инкапсуляция? (4 балла)
    # есть ли среди ваших друзей программисты, которых можно часто просить разжевать непонятные вещи или взять вас интерном к ним на работу? (8 баллов)

    Если вы набрали 0-1 баллов: обучение может занять до пяти лет, чтобы дорасти до уровня джуниора, но скорее всего терпения не хватит и забросите это дело через некоторое время. Возможно даже не стоит и начинать.

    Если вы набрали 2-4 балла: обучение может занять до 3 лет, чтобы дорасти до уровня джуниора. Есть немалый шанс что забросите на половине пути, но и небольшая вероятность успеха тоже присутствует.

    Если вы набрали 5-10 баллов: обучение может занять около 2 лет, чтобы дорасти до уровня джуниора. Шансы на успешное вхождение в айти есть, но потребуется много кропотливой работы.

    Если вы набрали 11-14 баллов: обучение может занять около года, чтобы дорасти до уровня джуниора. Шансы на успех достаточно неплохие. Дерзайте)

    Если вы набрали 15 баллов: обучение может занять около полугода, чтобы дорасти до уровня джуниора. Шансы на успех очень высокие. Идеальный билд чара)
    Ответ написан
    Комментировать