Как стать автором
Обновить
8
0.1
vp_arth @vp_arth

Архитектура ПО

Отправить сообщение
А в Вашем браузере нет галочки «Разрешить собирать анонимную статистику использования» для таких вещей?
Не за что. :)

Ещё один совет: когда наиграетесь с этим велосипедом, поищите удовлетворяющую Вас open source альтернативу и используйте её — ни к чему тратить силы на самостоятельную поддержку подобных функций.

На примере deepClone: рано или поздно Вы столкнётесь с циклическими ссылками и начнёте решать эту проблему. Есть несколько способов её решения, Вам придётся выбирать. Потом будут новые проблемы, возможно захочется сохранить прототипы… Путь даже такой элементарной штучки довольно долог. Но в существующих реализациях зачастую весь этот путь уже пройден. И для решения вновь возникающих проблем у Вас есть огромный штат добровольцев(включая Вас).

В общем, если проблема не академическая или «на поиграться», всегда стоит начинать с поиска существующих решений. Жизнь одна, если каждый будет распыляться на подобные мелочи. ни у кого не хватит времени создать что-то стоящее.

Хм, растёкся я тут мыслью по древу. извините.
Вы не «скопировали массив верно». Это тот же самый массив.

По хорошему, Вам нужен вызов `obj[i].map(deepClone)`, в массиве могут быть не только скаляры.
Разница не всегда такая большая.
Вопрос ещё и в том, а нужна ли этой функции высокая производительность в каждом конкретном случае.
Иногда сериализация/десериализация таки самый подходящий путь.
Хм, так вот оно что.
С утра на скринах сразу нескольких разных людей видел какой-то сломанный sovetnik.min.js.
А это просто Яндекс обновился, и впарил свои штучки людям в браузеры без спроса.
Такие форки существуют только в виде метаданных(надеюсь) и не занимают нисколько места
Так я и писал про вендорские, со своими всё проще.
Метод getRepository — вполне себе вендорский от doctrine.

Использование своего адаптера для такого метода избавит Вас от необходимости помогать IDE с помощью phpdoc:
public function getUserRepository(): UserRepository
{
    return $this->em->getRepository(User::class);
}


Таким методом Вы перекладываете ответственность за то, что будет возвращён объект нужного класса на себя.
В таком он действительно иногда нуждается, но только если тип вывести в общем случае невозможно.

Примеры:

 /** @var UserRepository $userRepo */
 $userRepo = $this->em->getRepository(User::class);

Или
 /** @var User $user */
 $user = $meta->newInstance();


Если это критично для вас, всегда можно выделить метод с нужной сигнатурой:
getUserRepository(): UserRepository
Ок, согласен.

$a = 1e99;
$b = 2e99;
$c = 3e99;
$ab = $a + $b;
var_dump($ab == $c); // false
var_dump(\abs($ab - $c) < PHP_FLOAT_EPSILON); // false


Оно и понятно, казалось бы.

На мой взгляд, необходимо привести порядок epsilon в соотвествие с порядком сравниваемых значений, например так:

  var_dump(\abs($ab - $c) < PHP_FLOAT_EPSILON * \min($ab, $c)); // true
> Как узнать равны ли два float в PHP
Заинтересовала статья на предмет корректности.

Насколько я понимаю числа с плавающей запятой, для разных порядков сравниваемых значений нужно брать epsilon разных порядков.

<?php
$a = 1e99;
$b = $a + 6.07e82;
$c = $a + 6.08e82;
var_dump($a == $b); // true
var_dump($a == $c); // false
var_dump(\abs($a - $b)); // 0
var_dump(\abs($a - $c)); // float(1.2141680576411E+83)
var_dump(PHP_FLOAT_EPSILON);
// float(1.2141680576411E+83)<float(2.2204460492503E-16) ?
var_dump(\abs($a - $c) < PHP_FLOAT_EPSILON); // false



Как видим, ненулевая дельта далека от PHP_FLOAT_EPSILON. Смысл последнего сравнения(взятого из статьи) от меня ускользает. Помогите понять, что это и зачем.
При такой линейной логике как у вас, подход из статьи всё улучшит.
Инвертировать проверки, где нужно, добавить ранние выходы — и всё будет уже не так плохо.
Ранние выходы можно сделать исключениями, но и простой `return` будет гораздо лучше тысячи флагов.

Пример рефакторинга

Останется немного подумать, над выделением методов из кусков этого кода по смыслу.
Ну и исключения тут вероятно подойдут лучше.

Этот комментарий не руководство к действию(прод всё таки), просто о том, как оно могло бы быть.
> Плохая ситуация — когда после перетасовки в каком-то месте после карты с номером i идет карта с номером i+1

Нормальная ситуация для нормального рандома.
Тасовка, в которой никакие пары карт никогда не сохраняют свои позиции — плохая ситуация.
____

В жизни обычно все при тасовке не перекладывают срез, а вдвигают его в оставшуюся колоду.
Карты при этом дополнительно перемешиваются, сохраняя только относительное расположение.
При такой реализации шаффла, всё перемешивается несколько быстрее.
____

Если положить колоду на стол и брать по одной карте, которую класть в случайное место в колоде в руках(которая изначально пуста), то после 52 таких итераций мы получим перетасованную колоду, равномерность которой зависит только от равномерности нашего «генератора случайного места».
Помню, в детстве был у меня на рабочем столе com-файл для перезагрузки, состоящий из одного far-jump на начало BIOS. :)
Это я бы тоже распарсил как обычный массив. А если нужен массив стрелочных функций, пришлось бы написать так:

$array = [
  ($a => $a + $b),
  ($x => $x * $y),
];
// то же, с yield:
yield ($foo => $bar);
Fix:
<?php endforeach?>
> положить 8 рублей
> Переводить ровно 4 рубля

Вы действительно пополняете мобильный счёт по 4/8 рублей? Интересно, каким способом?
В SO есть концепт self-answer, который позволяет поделиться актуальными знаниями, самостоятельно ответив на вопрос. Я имел в виду именно это.
Хорошие вопросы под актуальные ответы «из новостей» можно и самому написать.
Без else после return будет ещё чище.
Я себе на него вот такую таблетку сварганил(переходит на источник):

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @author       You
// @match        http://qaru.site/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    location.replace(document.querySelector('.question-text .aa-link').href)
})();

Информация

В рейтинге
2 834-й
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность