Форум программистов, компьютерный форум CyberForum.ru

Упрощение кода - C++

Восстановить пароль Регистрация
 
 
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.06.2014, 14:09     Упрощение кода #1
Всем привет.

Есть такой код:

C++
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
26
27
enum FTYPE { FALSE, TRUE, DEFAULT };
FTYPE f();
 
bool n()
{
    while( g() )
    {
        switch( f() )
        {
            case TRUE: return true; 
            case FALSE: return false; 
            case DEFAULT: break; 
        }
    }
    return false; 
}
 
bool c()
{
    switch( f() )
    {
       case TRUE: return true; 
       case FALSE: return false; 
       case DEFAULT: break; 
    }
    return n();
}
Как можно заметить, строки 8-13 и 20-25 эквивалентны, но можно ли их заменить новой функцией для исключения дублирования? Мне почему-то кажется, что нет. И единственное упрощение, которое тут можно сделать, это убрать строки с
C++
1
case DEFAULT: break;
т.к. они всё равно ни на что не влияют.

P.S. Обращу ваше внимание ещё на то, что c() в итоге может вызвать n(). (это не опечатка)

Какие будут идеи, уважаемые?

P.S. макроподстановку не предлагать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2014, 14:09     Упрощение кода
Посмотрите здесь:

Упрощение кода C++
C++ Упрощение и алгоритм
Упрощение кода C++
C++ Упрощение кода
Упрощение программного кода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 17:33     Упрощение кода #2
Tulosba, у меня только такой слегка извращенный вариант приходит в голову
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool n(bool c)
{
    while(с || g()))
    {
        switch( f() )
        {
            case TRUE: return true; 
            case FALSE: return false; 
            case DEFAULT: break; 
        }
        if (c) break;
    }
    return c ? n(false) : false;
}
функция С вызывается как n(true), функция N вызывается как n(false)
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
20.06.2014, 19:23     Упрощение кода #3
просто делегируй функцию
C#
1
2
3
4
5
6
        switch( f() )
        {
            case TRUE: return true; 
            case FALSE: return false; 
            case DEFAULT: break; 
        }
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
20.06.2014, 19:34     Упрощение кода #4

C++
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
26
27
28
enum FTYPE { FALSE, TRUE, DEFAULT };
FTYPE f();
 
bool SWITCH(FTYPE f)
{
    switch(f)
    {
    case TRUE: return true; 
    case FALSE: return false; 
    case DEFAULT: break; 
    }
    return false;
}
 
bool n()
{
    while( g() )
    {
        SWITCH(f());
    }
    return false; 
}
 
bool c()
{
    SWITCH(f());
    return n();
}
HighPredator
 Аватар для HighPredator
5346 / 1729 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
20.06.2014, 19:52     Упрощение кода #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ

Не по теме:

-- выпилено --

Добавлено через 6 минут
А стоп, не доглядел.



Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool n()
{
  while (g())
  {
    ftype k = f();
    if ( k != DEFAULT ) return k;
  }
  return false;
}
 
bool c()
{
  ftype k = f();
  if (k == DEFAULT) return n();
  else return k;
}
Добавлено через 1 минуту
Так вот можно.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.06.2014, 19:58  [ТС]     Упрощение кода #6
Issues, в вашем случае n() сможет вернуть только false, что не соответствует истине.
Цитата Сообщение от UnsKneD Посмотреть сообщение
просто делегируй функцию
Так же как Issues? Или как-то иначе?
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
20.06.2014, 20:06     Упрощение кода #7
Tulosba, вообще я с шарпом ветки перепутал. но было бы что то такое. но в таком случае return n(); никогда не выполнится.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
20.06.2014, 20:06     Упрощение кода #8
Думаю, если обернуть в функцию, то всё равно будет дублирующий код, для проверки возвращенного значения.
Если нет никаких критериев безопасности, может с си'шными прыжками попробовать поизвращаться?
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 20:09     Упрощение кода #9
Tulosba, моя функция вам видимо совсем не понравилась
HighPredator
20.06.2014, 20:11
  #10

Не по теме:

Хедин, не переживайте, мои по ходу тоже

Хедин
20.06.2014, 20:12
  #11

Не по теме:

HighPredator, что поделать, мир жесток)

Croessmah
20.06.2014, 20:12
  #12

Не по теме:

Цитата Сообщение от Хедин Посмотреть сообщение
моя функция вам видимо совсем не понравилась
думаю, это лишь минимальный пример кода, а не конкретный случай и нужно что-то более подходящее под разные ситуации

Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.06.2014, 20:14     Упрощение кода #13
Croessmah, мне кажется, если бы код был более глобальным, было бы легче изменить функции по феншую
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
20.06.2014, 20:19     Упрощение кода #14
Может нам хотя бы задачу озвучат? а не голый код.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
20.06.2014, 20:20     Упрощение кода #15
Извращения?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool foo ( FTYPE x ) {
    switch( x )
    {
       case TRUE: return true ; 
       case FALSE: return false ; 
       case DEFAULT: throw DEFEXCEPTION(); 
    }
}
//...
bool n()
{
    while( g() )
    {
         try {
            return foo(f()) ;
         } catch ( const DEFEXCEPTION & ) {
            break ;
         }
    }
    return false; 
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.06.2014, 20:23  [ТС]     Упрощение кода #16
Цитата Сообщение от Croessmah Посмотреть сообщение
может с си'шными прыжками попробовать поизвращаться?
Ну уж нет. Битоопства нам не надо
HighPredator, Хедин, надо ж было проверить код, прежде чем плюсы раздавать.
Хедин
20.06.2014, 20:25
  #17

Не по теме:

Tulosba, в таком случае поспешно отзываю претензии и негодования)))

HighPredator
 Аватар для HighPredator
5346 / 1729 / 320
Регистрация: 10.12.2010
Сообщений: 5,112
Записей в блоге: 3
20.06.2014, 21:02     Упрощение кода #18
Цитата Сообщение от Tulosba Посмотреть сообщение
HighPredator, Хедин, надо ж было проверить код, прежде чем плюсы раздавать.
? в смысле?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.06.2014, 21:07  [ТС]     Упрощение кода #19
Цитата Сообщение от Croessmah Посмотреть сообщение
Извращения?
А где цэ() тогда? И, кстати, у тебя не выполнится g() нужное кол-во раз, если g() вернет true, а f() вернет DEFAULT. Но сама идея интересная

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
? в смысле?
Ну вы возмущались с Хедин на пару, что никакого ответа вам не дал. Вот я и объясняю, что проверял код на соответствие, а потом уже плюсанул по результатам.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2014, 21:09     Упрощение кода
Еще ссылки по теме:

Упрощение кода программы C++
Упрощение и оптимизация кода (MS VCPP) C++
Упрощение дробей C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HighPredator
20.06.2014, 21:09     Упрощение кода
  #20

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Ну вы возмущались с Хедин на пару, что никакого ответа вам не дал. Вот я и объясняю, что проверял код на соответствие, а потом уже плюсанул по результатам.
Аааа, а я то понял так, что мол код непроверенный выложил и за зря плюсы получил

Yandex
Объявления
20.06.2014, 21:09     Упрощение кода
Ответ Создать тему
Опции темы

Текущее время: 00:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru