Ещё один совет: когда наиграетесь с этим велосипедом, поищите удовлетворяющую Вас open source альтернативу и используйте её — ни к чему тратить силы на самостоятельную поддержку подобных функций.
На примере deepClone: рано или поздно Вы столкнётесь с циклическими ссылками и начнёте решать эту проблему. Есть несколько способов её решения, Вам придётся выбирать. Потом будут новые проблемы, возможно захочется сохранить прототипы… Путь даже такой элементарной штучки довольно долог. Но в существующих реализациях зачастую весь этот путь уже пройден. И для решения вновь возникающих проблем у Вас есть огромный штат добровольцев(включая Вас).
В общем, если проблема не академическая или «на поиграться», всегда стоит начинать с поиска существующих решений. Жизнь одна, если каждый будет распыляться на подобные мелочи. ни у кого не хватит времени создать что-то стоящее.
Разница не всегда такая большая.
Вопрос ещё и в том, а нужна ли этой функции высокая производительность в каждом конкретном случае.
Иногда сериализация/десериализация таки самый подходящий путь.
Хм, так вот оно что.
С утра на скринах сразу нескольких разных людей видел какой-то сломанный sovetnik.min.js.
А это просто Яндекс обновился, и впарил свои штучки людям в браузеры без спроса.
Как видим, ненулевая дельта далека от PHP_FLOAT_EPSILON. Смысл последнего сравнения(взятого из статьи) от меня ускользает. Помогите понять, что это и зачем.
При такой линейной логике как у вас, подход из статьи всё улучшит.
Инвертировать проверки, где нужно, добавить ранние выходы — и всё будет уже не так плохо.
Ранние выходы можно сделать исключениями, но и простой `return` будет гораздо лучше тысячи флагов.
Останется немного подумать, над выделением методов из кусков этого кода по смыслу.
Ну и исключения тут вероятно подойдут лучше.
Этот комментарий не руководство к действию(прод всё таки), просто о том, как оно могло бы быть.
> Плохая ситуация — когда после перетасовки в каком-то месте после карты с номером i идет карта с номером i+1
Нормальная ситуация для нормального рандома.
Тасовка, в которой никакие пары карт никогда не сохраняют свои позиции — плохая ситуация.
____
В жизни обычно все при тасовке не перекладывают срез, а вдвигают его в оставшуюся колоду.
Карты при этом дополнительно перемешиваются, сохраняя только относительное расположение.
При такой реализации шаффла, всё перемешивается несколько быстрее.
____
Если положить колоду на стол и брать по одной карте, которую класть в случайное место в колоде в руках(которая изначально пуста), то после 52 таких итераций мы получим перетасованную колоду, равномерность которой зависит только от равномерности нашего «генератора случайного места».
Ещё один совет: когда наиграетесь с этим велосипедом, поищите удовлетворяющую Вас open source альтернативу и используйте её — ни к чему тратить силы на самостоятельную поддержку подобных функций.
На примере deepClone: рано или поздно Вы столкнётесь с циклическими ссылками и начнёте решать эту проблему. Есть несколько способов её решения, Вам придётся выбирать. Потом будут новые проблемы, возможно захочется сохранить прототипы… Путь даже такой элементарной штучки довольно долог. Но в существующих реализациях зачастую весь этот путь уже пройден. И для решения вновь возникающих проблем у Вас есть огромный штат добровольцев(включая Вас).
В общем, если проблема не академическая или «на поиграться», всегда стоит начинать с поиска существующих решений. Жизнь одна, если каждый будет распыляться на подобные мелочи. ни у кого не хватит времени создать что-то стоящее.
Хм, растёкся я тут мыслью по древу. извините.
По хорошему, Вам нужен вызов `obj[i].map(deepClone)`, в массиве могут быть не только скаляры.
Вопрос ещё и в том, а нужна ли этой функции высокая производительность в каждом конкретном случае.
Иногда сериализация/десериализация таки самый подходящий путь.
С утра на скринах сразу нескольких разных людей видел какой-то сломанный sovetnik.min.js.
А это просто Яндекс обновился, и впарил свои штучки людям в браузеры без спроса.
Метод getRepository — вполне себе вендорский от doctrine.
Использование своего адаптера для такого метода избавит Вас от необходимости помогать IDE с помощью phpdoc:
Таким методом Вы перекладываете ответственность за то, что будет возвращён объект нужного класса на себя.
Примеры:
Или
Если это критично для вас, всегда можно выделить метод с нужной сигнатурой:
Оно и понятно, казалось бы.
На мой взгляд, необходимо привести порядок epsilon в соотвествие с порядком сравниваемых значений, например так:
Заинтересовала статья на предмет корректности.
Насколько я понимаю числа с плавающей запятой, для разных порядков сравниваемых значений нужно брать epsilon разных порядков.
Как видим, ненулевая дельта далека от PHP_FLOAT_EPSILON. Смысл последнего сравнения(взятого из статьи) от меня ускользает. Помогите понять, что это и зачем.
Инвертировать проверки, где нужно, добавить ранние выходы — и всё будет уже не так плохо.
Ранние выходы можно сделать исключениями, но и простой `return` будет гораздо лучше тысячи флагов.
Останется немного подумать, над выделением методов из кусков этого кода по смыслу.
Ну и исключения тут вероятно подойдут лучше.
Этот комментарий не руководство к действию(прод всё таки), просто о том, как оно могло бы быть.
Нормальная ситуация для нормального рандома.
Тасовка, в которой никакие пары карт никогда не сохраняют свои позиции — плохая ситуация.
____
В жизни обычно все при тасовке не перекладывают срез, а вдвигают его в оставшуюся колоду.
Карты при этом дополнительно перемешиваются, сохраняя только относительное расположение.
При такой реализации шаффла, всё перемешивается несколько быстрее.
____
Если положить колоду на стол и брать по одной карте, которую класть в случайное место в колоде в руках(которая изначально пуста), то после 52 таких итераций мы получим перетасованную колоду, равномерность которой зависит только от равномерности нашего «генератора случайного места».
> Переводить ровно 4 рубля
Вы действительно пополняете мобильный счёт по 4/8 рублей? Интересно, каким способом?