1. Java / Говнокод #23389

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    public TkApp(final Base base) throws IOException {
            super(
                new TkWithHeaders(
                    new TkVersioned(
                        new TkMeasured(
                            new TkFlash(
                                new TkAppFallback(
                                    new TkAppAuth(
                                        new TkForward(
                                            new TkFork(
                                                new FkHost(
                                                    "relay.jare.io",
                                                    new TkFallback(
                                                        new TkRelay(base),
                                                        req -> new Opt.Single<>(
                                                            new RsWithType(
                                                                new RsWithBody(
                                                                    new RsWithStatus(req.code()),
                                                                    new Sprintf(
                                                                        "Please, submit this stacktrace to GitHub and we'll try to help: https://github.com/yegor256/jare/issues\n\n%s",
                                                                        ExceptionUtils.getStackTrace(
                                                                            req.throwable()
                                                                        )
                                                                    )
                                                                ),
                                                                "text/plain"
                                                            )
                                                        )
                                                    )
                                                ),
                                                ...

    Взято отсюда: https://github.com/yegor256/jare/blob/master/src/main/java/io/jare/tk/TkApp.java#L70

    Запостил: mazoxox, 06 Октября 2017

    Комментарии (10) RSS

    • ОЧень хорошой, объектно-ориентированный поход.
      А вы бы хотели говнокода в одну строчку как на пхп?
      ---------------
      Тем более что автор пишет:
      Author of "Elegant Objects" book (buy it on Amazon)
      Ответить
    • x = new RsWithStatus(req.code());
      z = ExceptionUtils.getStackTrace(req.throwable());
      y = new Sprintf("Please, submit this stacktrace to GitHub and we'll try to help: https://github.com/yegor256/jare/issues\n\n%s", z);
      w = new RsWithBody(x, y);
      v = new RsWithType(w, "text/plain");
      u = req -> new Opt.Single<>(v);
      t = new TkFallback(new TkRelay(base), u);
      s = new FkHost("relay.jare.io", t);
      ...

      Так лучше?
      Ответить
    • undo-нотация
      Ответить
    • Объектно-ориентированненько!
      Ответить
      • Смотри, как выглядит настоящее ООП:
        https://github.com/Herzult/SimplePHPEasyPlus

        https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
        Ответить
        • use SimplePHPEasyPlus\Number\NumberCollection;
          use SimplePHPEasyPlus\Number\SimpleNumber;
          use SimplePHPEasyPlus\Number\CollectionItemNumberProxy;
          use SimplePHPEasyPlus\Parser\SimpleNumberStringParser;
          use SimplePHPEasyPlus\Iterator\CallbackIterator;
          use SimplePHPEasyPlus\Operator\AdditionOperator;
          use SimplePHPEasyPlus\Operation\ArithmeticOperation;
          use SimplePHPEasyPlus\Operation\OperationStream;
          use SimplePHPEasyPlus\Engine;
          use SimplePHPEasyPlus\Calcul\Calcul;
          use SimplePHPEasyPlus\Calcul\CalculRunner;
          
          
          $numberCollection = new NumberCollection();
          
          $numberParser = new SimpleNumberStringParser();
          
          $firstParsedNumber = $numberParser->parse('1');
          $firstNumber = new SimpleNumber($firstParsedNumber);
          $firstNumberProxy = new CollectionItemNumberProxy($firstNumber);
          
          $numberCollection->add($firstNumberProxy);
          
          $secondParsedNumber = $numberParser->parse('1');
          $secondNumber = new SimpleNumber($secondParsedNumber);
          $secondNumberProxy = new CollectionItemNumberProxy($secondNumber);
          
          $numberCollection->add($secondNumberProxy);
          
          $addition = new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber');
          
          $operation = new ArithmeticOperation($addition);
          
          $engine = new Engine($operation);
          
          $calcul = new Calcul($engine, $numberCollection);
          
          $runner = new CalculRunner();
          
          $runner->run($calcul);
          
          $result = $calcul->getResult();
          $numericResult = $result->getValue(); // 2
          Ответить
          • Убрал лишние переменные (строчки с use повторять не буду):
            $numberCollection = new NumberCollection();
            
            $numberParser = new SimpleNumberStringParser();
            
            $numberCollection->add(new CollectionItemNumberProxy(new SimpleNumber($numberParser->parse('1'))));
            
            $numberCollection->add(new CollectionItemNumberProxy(new SimpleNumber($numberParser->parse('1'))));
            
            $calcul = new Calcul(new Engine(new ArithmeticOperation(new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber'))), $numberCollection);
            
            (new CalculRunner())->run($calcul);
            
            $numericResult = $calcul->getResult()->getValue(); // 2


            Если NumberCollection поддерживает fluent interface, то можно так:
            $numberParser = new SimpleNumberStringParser();
            
            $calcul = new Calcul(
                new Engine(new ArithmeticOperation(new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber'))), 
                (new NumberCollection())->add(new CollectionItemNumberProxy(new SimpleNumber($numberParser->parse('1'))))
                                        ->add(new CollectionItemNumberProxy(new SimpleNumber($numberParser->parse('1'))))                        
            );
            
            (new CalculRunner())->run($calcul);
            
            $numericResult = $calcul->getResult()->getValue(); // 2


            А если ещё CalculRunner будет поддерживать fluent interface, то можно будет и так:
            $numberParser = new SimpleNumberStringParser();
            
            $numericResult = (new CalculRunner())->run(new Calcul(
                new Engine(new ArithmeticOperation(new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber'))), 
                (new NumberCollection())->add(new CollectionItemNumberProxy(new SimpleNumber($numberParser->parse('1'))))
                                        ->add(new CollectionItemNumberProxy(new SimpleNumber($numberParser->parse('1'))))                        
            ))->getResult()->getValue(); // 2
            Ответить

    Добавить комментарий