Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как раскопипастить методы / 11 сообщений из 11, страница 1 из 1
17.12.2019, 12:23
    #39903999
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Есть два метода очень похожих, за исключением того, что они используют разные методы у объекта.
Как это можно переписать, чтобы не выглядело как копи-паста?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public function addScoresForAvailableTxBandwidth(array $applicants): void
{
    $result = [];
    foreach ($applicants as $applicant) {
        $node = $applicant->getNode();
        if ($node->getTxMax() > 0) {
            $tx = $node->getTx() > 10 ? $node->getTx() : ($node->getTxMax() - 50);
            $bandwidthAvailable = $node->getTxMax() - $tx;
            $applicant->addScores($bandwidthAvailable);
        }
    }
}

public function addScoresForAvailableRxBandwidth(array $applicants): void
{
    $result = [];
    foreach ($applicants as $applicant) {
        $node = $applicant->getNode();
        if ($node->getRxMax() > 0) {
            $rx = $node->getRx() > 10 ? $node->getRx() : ($node->getRxMax() - 50);
            $bandwidthAvailable = $node->getRxMax() - $rx;
            $applicant->addScores($bandwidthAvailable);
        }
    }
}
...
Рейтинг: 0 / 0
17.12.2019, 12:33
    #39904013
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
...
Рейтинг: 0 / 0
17.12.2019, 12:35
    #39904015
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы


Не, такой вариант я сразу отбросил. Не хотелось бы прибегать к рефлексии.
...
Рейтинг: 0 / 0
17.12.2019, 12:52
    #39904030
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Сделать у объекта метод get() и вызывать его с уточнением Tx или Rx
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
public function get(string type) {
   switch {
      case type == "Tx": 
          return getTx();
      case type == "Rx": 
          return getRx();
   }
   // unknown type
}
...
Рейтинг: 0 / 0
17.12.2019, 12:55
    #39904035
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
если у вас идет разделение методов в объекте node на rx, tx. то очевидно, что и указанные методы надо делать отдельно, то, что они похожи пофигу совершенно. как вариант можно передать 2 делегата для Get?x и Get?xMax и обобщить метод и убрать из его названия Tx, Rx и т.д.
...
Рейтинг: 0 / 0
17.12.2019, 13:00
    #39904039
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Hett,

Чо бы и нет. У пыха простая рефлексия, как я посмотрю. Прям захотелось сесть и запилить фреймворк.
...
Рейтинг: 0 / 0
17.12.2019, 13:07
    #39904045
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Это все какие-то костыли. Давайте представим что это не пых.
...
Рейтинг: 0 / 0
17.12.2019, 13:08
    #39904047
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Не обязательно делать один метод который будет комбинировать в себе эти два. Можно вынести общий код отдельно.
...
Рейтинг: 0 / 0
17.12.2019, 13:14
    #39904055
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Hett,

Но как? Это же пых. А если не пых, то что? Сишечка? Switch-case портянка в помощь. Там будет всякое с tp и ветвлением rx/tx.
...
Рейтинг: 0 / 0
17.12.2019, 18:34
    #39904295
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Hett
...представим что это не пых.


темплейты в помощь...
функторы
базовые классы
грань-кристалл

дохрена подходов...это техника...статика в ОО подходе только модель... тогда надо плясать от неё начинать...
а так - сфера+вакуум=хрень полная

(круглый)
...
Рейтинг: 0 / 0
17.12.2019, 19:48
    #39904343
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как раскопипастить методы
Вот тут вариант есть https://www.php.net/manual/ru/functions.anonymous.php

Попробуйте через anonymous.

Эх нет в топике Студентика с его Ультра-короткими языками. Совершенству нет предела.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как раскопипастить методы / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]