Re: Как упростить код
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 16.04.12 15:39
Оценка: 1 (1) +1 -1
Здравствуйте, Аноним, Вы писали:


А>Вот такой лабиринт,


А чего тут упрощать? И так проще некуда.....
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[13]: Как упростить код
От: batu Украина  
Дата: 22.04.12 15:06
Оценка: -2 :)
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, batu, Вы писали:


___>>>Nemerle рулит


___>>>Смотри пример hardcase-а с Patern Matching

B>>А в двух словах сюда?

___>Епп...ерный театр. Тв ветку вообще читаешь? Re[5]: Как упростить код
Автор: hardcase
Дата: 17.04.12

Не смотрел.. Да хороший вариант с точки зрения читабельности.. Но, мой эффективней..Это не говорит от том, что его нельзя сделать более наглядным.. Ввести вместо 1-3 перечислимые переменные "TrueTrue" и т.д... Как вариант..
Re[6]: Как упростить код
От: andyag  
Дата: 16.04.12 20:11
Оценка: :))
Здравствуйте, xvost, Вы писали:

X>Здравствуйте, andyag, Вы писали:


A>>Расскажите пожалуйста разницу между


X>

X>Рву волосы на попе. В ночи не заметил что там return'ы

Не поверите — были те же ощущения, когда ваш решарпер ткнул меня в такой код носом
Re[15]: Как упростить код
От: batu Украина  
Дата: 23.04.12 04:04
Оценка: -1 :)
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, batu, Вы писали:


B>>Не смотрел.. Да хороший вариант с точки зрения читабельности.. Но, мой эффективней..Это не говорит от том, что его нельзя сделать более наглядным.. Ввести вместо 1-3 перечислимые переменные "TrueTrue" и т.д... Как вариант..


___>Да-дад. Волосы на 87% шелковистее.

От сложности условий зависит.. А вот такой резкости не пойму. Мы ж обсуждаем варианты или здесь одобряются только оды Немерле?
Re[5]: Как упростить код
От: hardcase Пират http://nemerle.org
Дата: 17.04.12 11:00
Оценка: 1 (1)
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, Lloyd, Вы писали:


L>>Здравствуйте, _d_m_, Вы писали:


H>>>>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.


___>>>Как?


L>>Завести переменную для форматной строки.

L>>В зависимости от условий присвоить переменной то или иное значение.
L>>Использовать форматную строку в string.Format

L>>


___>И где здесь PM?


Ключевые слова выделены жирным. Очевидно, что C# не входит во множество языков с поддержкой сопоставления с образцом на уровне синтаксиса, так что кода на нем не приведу. Если интересует, как поможет здесь PM, то код будет примерно таким:
def fmt = match(condition1, condition2)
{
  | (true,  true)  => "{0}"
  | (true,  false) => "{0}-{1}"
  | (false, true)  => "{0:N3}"
  | (false, false) => "x:{0:N3} y:{0:N3}"
};
string.Format(fmt, p[1], p[0])
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Как упростить код
От: vmpire Россия  
Дата: 16.04.12 16:34
Оценка: :)
Здравствуйте, Аноним, Вы писали:


А>Вот такой лабиринт,

А>


А> if ( condition1 )
А> { 
А>    if ( condition2 )
А>      return string.Format( "{0}", p[1] );
А>    else
А>      return string.Format( "{0}-{1}", p[1], p[0] );
А> }
А> else
А> {
А>    if ( condition2 )
А>      return string.Format( "{0:N3}", p[1] );
А>    else
А>      return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
А> }

А>



А>где condition1,2 — bool тип

А>p — массив double из двух элементов;
Если это весь код, то упрощать, возможно, и не надо. Всё просто и очевидно.
Если же это часть большого куска однотипных проверок условий, который большой и растёт, то можно разово сформировать набор правил типа

List<Tuple<Predicate<bool[]>, Func<object[], string>>> formattingRules; // Да, я знаю, что читается плохо, можно свои классы ввести, будет гораздо лучше;

Заполнить его правилами

formattingRules.Add(new Tuple<Predicate<bool[]>, Func<object[], string>>(conditions => conditions[0] && conditions[1], p => string.Format( "{0}", p[1] )));
formattingRules.Add(new Tuple<Predicate<bool[]>, Func<object[], string>>(conditions => conditions[0] && !conditions[1], p => string.Format( "{0}-{1}", p[1], p[0] ) )));
formattingRules.Add(new Tuple<Predicate<bool[]>, Func<object[], string>>(conditions => !conditions[0] && conditions[1], p => string.Format( "{0:N3}", p[1] ) )));
formattingRules.Add(new Tuple<Predicate<bool[]>, Func<object[], string>>(conditions => !conditions[0] && !conditions[1], p => string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] ) )));



А потом, когда нужен результат, перебирать пока не сработает одно из условий

var conditions = new bool[] { текущие условия }
string result = formattingRules.Single(rule => rule.Item1(conditions)).Item2(p)


Если что, синтаксис не проверял.
Re: Как упростить код
От: Flem1234  
Дата: 16.04.12 19:33
Оценка: -1
Здравствуйте, Аноним, Вы писали:

Можно сверстать табличкой, если условие станет лучше читаться:

             if  (condition1 &&  condition2) return string.Format("{0}", p[1]);
        else if  (condition2 && !condition2) return string.Format("{0}-{1}", p[1], p[0]);
        else if (!condition1 &&  condition2) return string.Format("{0:N3}", p[1]);
        else if (!condition1 && !condition2) return string.Format("x:{0:N3} y:{0:N3}", p[1], p[0]);


Только автоформатирование или рефакторинг может все испортить.
Re[2]: Как упростить код
От: andyag  
Дата: 16.04.12 19:55
Оценка: +1
Здравствуйте, Flem1234, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


F>Можно сверстать табличкой, если условие станет лучше читаться:


F>
F>             if  (condition1 &&  condition2) return string.Format("{0}", p[1]);
F>        else if  (condition2 && !condition2) return string.Format("{0}-{1}", p[1], p[0]);
F>        else if (!condition1 &&  condition2) return string.Format("{0:N3}", p[1]);
F>        else if (!condition1 && !condition2) return string.Format("x:{0:N3} y:{0:N3}", p[1], p[0]);
F>


F>Только автоформатирование или рефакторинг может все испортить.


3 раза бессмысленный else для повышения читабельности?
Re: Как упростить код
От: xobotik Россия  
Дата: 18.04.12 13:36
Оценка: :)
Здравствуйте, Аноним, Вы писали:

Сделать DSL.
С уважением!
Re[11]: Как упростить код
От: batu Украина  
Дата: 20.04.12 08:44
Оценка: -1
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, batu, Вы писали:


B>>Ты считаешь что прыгать среди вложеных If-ов легче? И в реальных задачах не симпатичные кодишен 1-2-3, а довольно не простые выражения тоже выносящие мозги. Плоские звучит хорошо.. А что за зверь?


___>Nemerle рулит


___>Смотри пример hardcase-а с Patern Matching

А в двух словах сюда?
Как упростить код
От: Аноним  
Дата: 16.04.12 15:33
Оценка:
Вот такой лабиринт,


 if ( condition1 )
 { 
    if ( condition2 )
      return string.Format( "{0}", p[1] );
    else
      return string.Format( "{0}-{1}", p[1], p[0] );
 }
 else
 {
    if ( condition2 )
      return string.Format( "{0:N3}", p[1] );
    else
      return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
 }



где condition1,2 — bool тип
p — массив double из двух элементов;
Re: Как упростить код
От: hardcase Пират http://nemerle.org
Дата: 16.04.12 15:39
Оценка:
Здравствуйте, Аноним, Вы писали:

Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Как упростить код
От: namespace  
Дата: 16.04.12 17:20
Оценка:
Ожидалось нечто вроде этого?
string s1 = condition1 ? "{0}" : "{0:N3}";
string s2 = condition1 ? "{0}-{1}" : "x:{0:N3} y:{0:N3}";

return  string.Format(condition2 ? s1 : s2, p[1], p[0]));

Осторожно с условиями '?', не всем они нравятся.
Дальше сворачивать нет смысла — станет нечитабельно.
Задание c собеседования?
Re[3]: Как упростить код
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 16.04.12 19:58
Оценка:
Здравствуйте, andyag, Вы писали:

A>3 раза бессмысленный else для повышения читабельности?


Он ни разу не бессмысленный.
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[4]: Как упростить код
От: andyag  
Дата: 16.04.12 20:04
Оценка:
Здравствуйте, xvost, Вы писали:

X>Здравствуйте, andyag, Вы писали:


A>>3 раза бессмысленный else для повышения читабельности?


X>Он ни разу не бессмысленный.


Расскажите пожалуйста разницу между
            if  (condition1 &&  condition2) return string.Format("{0}", p[1]);
       else if  (condition2 && !condition2) return string.Format("{0}-{1}", p[1], p[0]);
       else if (!condition1 &&  condition2) return string.Format("{0:N3}", p[1]);
       else if (!condition1 && !condition2) return string.Format("x:{0:N3} y:{0:N3}", p[1], p[0]);

и
       if  (condition1 &&  condition2) return string.Format("{0}", p[1]);
       if  (condition2 && !condition2) return string.Format("{0}-{1}", p[1], p[0]);
       if (!condition1 &&  condition2) return string.Format("{0:N3}", p[1]);
       if (!condition1 && !condition2) return string.Format("x:{0:N3} y:{0:N3}", p[1], p[0]);
Re[5]: Как упростить код
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 16.04.12 20:07
Оценка:
Здравствуйте, andyag, Вы писали:

A>Расскажите пожалуйста разницу между



Рву волосы на попе. В ночи не заметил что там return'ы
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re: Как упростить код
От: Lloyd Россия  
Дата: 16.04.12 20:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>где condition1,2 — bool тип

А>p — массив double из двух элементов;

1. Дать condition1 и condition2 человеческие имена.
2. Завести структуктурку ConditionCase с 2-мя bool-овскими полями с именами данными на 1-м шаге
3. Завести static readonly Dictionary<ConditionCase, string> _CASE_FORMAT_MAPPING и зарегестрировать в ней форматные строки
4. Переписать гребенку if-ов на string.Format(_CASE_FORMAT_MAPPING[case], p[0], p[1]), где case это ConditionCase.
5. Понять, что получилось чрезчур overdesigned и вернуться к изначальному варианту.

Re[2]: Как упростить код
От: _d_m_  
Дата: 17.04.12 00:04
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


H>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.


Как?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[3]: Как упростить код
От: Lloyd Россия  
Дата: 17.04.12 00:09
Оценка:
Здравствуйте, _d_m_, Вы писали:

H>>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.


___>Как?


Завести переменную для форматной строки.
В зависимости от условий присвоить переменной то или иное значение.
Использовать форматную строку в string.Format

Re[4]: Как упростить код
От: _d_m_  
Дата: 17.04.12 00:27
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, _d_m_, Вы писали:


H>>>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.


___>>Как?


L>Завести переменную для форматной строки.

L>В зависимости от условий присвоить переменной то или иное значение.
L>Использовать форматную строку в string.Format

L>


И где здесь PM?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[5]: Как упростить код
От: Lloyd Россия  
Дата: 17.04.12 00:30
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>Завести переменную для форматной строки.

L>>В зависимости от условий присвоить переменной то или иное значение.
L>>Использовать форматную строку в string.Format

L>>


___>И где здесь PM?


В коде получения форматной строки.
Re[6]: Как упростить код
От: _d_m_  
Дата: 17.04.12 03:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

___>>И где здесь PM?


L>В коде получения форматной строки.


И где код?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: Как упростить код
От: -VaS- Россия vaskir.blogspot.com
Дата: 17.04.12 05:22
Оценка:
L>1. Дать condition1 и condition2 человеческие имена.
L>2. Завести структуктурку ConditionCase с 2-мя bool-овскими полями с именами данными на 1-м шаге
L>3. Завести static readonly Dictionary<ConditionCase, string> _CASE_FORMAT_MAPPING и зарегестрировать в ней форматные строки
L>4. Переписать гребенку if-ов на string.Format(_CASE_FORMAT_MAPPING[case], p[0], p[1]), где case это ConditionCase.
L>5. Понять, что получилось чрезчур overdesigned и вернуться к изначальному варианту.

+1, но п.5 вряд ли будет иметь место Маленькие классы — гуд, гуд и еще раз гуд.
Re[2]: Как упростить код
От: Nikita123 Россия  
Дата: 17.04.12 07:35
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


F>Можно сверстать табличкой, если условие станет лучше читаться:


F>
F>             if  (condition1 &&  condition2) return string.Format("{0}", p[1]);
F>        else if  (condition2 && !condition2) return string.Format("{0}-{1}", p[1], p[0]);
F>        else if (!condition1 &&  condition2) return string.Format("{0:N3}", p[1]);
F>        else if (!condition1 && !condition2) return string.Format("x:{0:N3} y:{0:N3}", p[1], p[0]);
F>

Особенно веселое выделенное условие

F>Только автоформатирование или рефакторинг может все испортить.
Желаю успеха,
Никита.
Re[7]: Как упростить код
От: Lloyd Россия  
Дата: 17.04.12 10:10
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>В коде получения форматной строки.


___>И где код?


Там же, где и PM
Re[8]: Как упростить код
От: _d_m_  
Дата: 17.04.12 11:02
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, _d_m_, Вы писали:


L>>>В коде получения форматной строки.


___>>И где код?


L>Там же, где и PM


Если нечего ответить по существу то может и не надо разводить игру в вопросы и загадки как ты постоянно делаешь.
Я жду примера кода с PM от hardcase или от кого-то тоже адекватного.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: Как упростить код
От: hardcase Пират http://nemerle.org
Дата: 17.04.12 11:04
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Вот такой лабиринт,

А>


А> if ( condition1 )
А> { 
А>    if ( condition2 )
А>      return string.Format( "{0}", p[1] );
А>    else
А>      return string.Format( "{0}-{1}", p[1], p[0] );
А> }
А> else
А> {
А>    if ( condition2 )
А>      return string.Format( "{0:N3}", p[1] );
А>    else
А>      return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
А> }

А>



Нет ли ошибки в 4-й форматной строке? Что-то мне подсказывает что там должно быть:
"x:{0:N3} y:{1:N3}"
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: Как упростить код
От: Lloyd Россия  
Дата: 17.04.12 11:31
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>>>И где код?


L>>Там же, где и PM


___>Если нечего ответить по существу то может и не надо разводить игру в вопросы и загадки как ты постоянно делаешь.


А может это лучше тебе начать читать то, что тебе пишут и перестать прикидываться дурачком?

___>Я жду примера кода с PM от hardcase или от кого-то тоже адекватного.


Открой любой туториал по тому же nemerle и узри.
Re[10]: Как упростить код
От: _d_m_  
Дата: 17.04.12 12:53
Оценка:
Здравствуйте, Lloyd, Вы писали:

___>>Если нечего ответить по существу то может и не надо разводить игру в вопросы и загадки как ты постоянно делаешь.


L>А может это лучше тебе начать читать то, что тебе пишут и перестать прикидываться дурачком?


Ты лично не написал ничего информативного, только всякую пургу, впрочем как обычно.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[11]: Как упростить код
От: Lloyd Россия  
Дата: 17.04.12 13:28
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>А может это лучше тебе начать читать то, что тебе пишут и перестать прикидываться дурачком?


___>Ты лично не написал ничего информативного, только всякую пургу, впрочем как обычно.


Я указал, как можно устранить вызов множественного string.Format
Если у тебя были сложности с извлечением информации из того поста, то боюсь, "проблемы на вашей стороне".
Re: Как упростить код
От: ecconaut  
Дата: 17.04.12 13:35
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Вот такой лабиринт,

А>


А> if ( condition1 )
А> { 
А>    if ( condition2 )
А>      return string.Format( "{0}", p[1] );
А>    else
А>      return string.Format( "{0}-{1}", p[1], p[0] );
А> }
А> else
А> {
А>    if ( condition2 )
А>      return string.Format( "{0:N3}", p[1] );
А>    else
А>      return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
А> }

А>



А>где condition1,2 — bool тип

А>p — массив double из двух элементов;

if ( condition2 )
    return p[1].ToString( condition1 ? "G" : "N3" );

return string.Format( condition1 ? "{0}-{1}" : "x:{0:N3} y:{0:N3}", p[1], p[0] );
Re: Как упростить код
От: vf  
Дата: 17.04.12 13:39
Оценка:
Здравствуйте, Аноним, Вы писали:

Так наверное чуть правильнее:

return string.Format(GetFormat(), p[1], p[0]);

string GetFormat()
{
 if ( condition1 )
 { 
    if ( condition2 )
      return "{0}";
    else
      return "{0}-{1}";
 }
 elseif ( condition2 )
      return "{0:N3}";
    else
      return "x:{0:N3} y:{0:N3}";
 }
}



Так наверное читабельность только хуже станет.

string.Format(condition1 ? ( condition2 ? "{0}" : "{0}-{1}" ) : ( condition2 ? "{0:N3}" : "{0:N3}-{1:N3}" ), p[1], p[0]);
Re[3]: Как упростить код
От: Lloyd Россия  
Дата: 17.04.12 13:44
Оценка:
Здравствуйте, -VaS-, Вы писали:

VS>+1, но п.5 вряд ли будет иметь место Маленькие классы — гуд, гуд и еще раз гуд.


Не в этом случае, имхо.
Re: Как упростить код
От: batu Украина  
Дата: 18.04.12 14:10
Оценка:
Здравствуйте, Аноним, Вы писали:


int 1=0
if ( condition1 ){I=1}
if ( condition2 ){I+=2}
Select Case I
Case 0 return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
Case 1 return string.Format( "{0}-{1}", p[1], p[0] );
Case 2 return string.Format( "{0:N3}", p[1] );
Case 3 return string.Format( "{0}", p[1] );
End Select

Возможно и напутал в последовательности.. И не знаю операторов C#, но ход мысли такой.. С форматированием тоже не знаком.. Что там написано не пойму, но возможно часть тоже можно поготовить заранее.. Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...
Re[2]: Как упростить код
От: hardcase Пират http://nemerle.org
Дата: 19.04.12 09:02
Оценка:
Здравствуйте, batu, Вы писали:

B>Возможно и напутал в последовательности.. И не знаю операторов C#, но ход мысли такой.. С форматированием тоже не знаком.. Что там написано не пойму, но возможно часть тоже можно поготовить заранее.. Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...


Взаимноисключающие параграфы детектед Остается только гадать что делать в Default-случае, ибо в исходном коде ситуации таковой небыло.
Идея с конечным автоматом хороша лишь при условии, что подобный автомат строится машиной, а не человеком. Добавлять дополнительные состояния в него — сущий ад.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Как упростить код
От: Lloyd Россия  
Дата: 19.04.12 11:24
Оценка:
Здравствуйте, batu, Вы писали:

  Скрытый текст
B>int 1=0
B>if ( condition1 ){I=1}
B>if ( condition2 ){I+=2}
B>Select Case I
B> Case 0 return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
B> Case 1 return string.Format( "{0}-{1}", p[1], p[0] );
B> Case 2 return string.Format( "{0:N3}", p[1] );
B> Case 3 return string.Format( "{0}", p[1] );
B>End Select


B>Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...


Предположим, добавился condition3. В этом случае переписывать придется все case-ы.
Re[3]: Как упростить код
От: batu Украина  
Дата: 19.04.12 15:16
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, batu, Вы писали:


L>
  Скрытый текст
B>>int 1=0
B>>if ( condition1 ){I=1}
B>>if ( condition2 ){I+=2}
B>>Select Case I
B>> Case 0 return string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );
B>> Case 1 return string.Format( "{0}-{1}", p[1], p[0] );
B>> Case 2 return string.Format( "{0:N3}", p[1] );
B>> Case 3 return string.Format( "{0}", p[1] );
B>>End Select


B>>Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...


L>Предположим, добавился condition3. В этом случае переписывать придется все case-ы.

Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней
Re[4]: Как упростить код
От: hardcase Пират http://nemerle.org
Дата: 19.04.12 15:26
Оценка:
Здравствуйте, batu, Вы писали:

B>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней


C If-ами поток управления очевиден. С арифметикой — нет.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Как упростить код
От: Lloyd Россия  
Дата: 19.04.12 15:29
Оценка:
Здравствуйте, batu, Вы писали:

B>>>Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...


L>>Предположим, добавился condition3. В этом случае переписывать придется все case-ы.

B>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней

Нет, и редактировать, и читать  if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот.
Re[5]: Как упростить код
От: batu Украина  
Дата: 19.04.12 16:23
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, batu, Вы писали:


B>>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней


H>C If-ами поток управления очевиден. С арифметикой — нет.

Я не говорил что выбрал удачно арифметику.. На кухне рис готовился.. Но по любому больше двух уровней If-ов создают напряжение. Это вроде как в линейку.. Проще отследить.. Если у вы считаете по другому имеете право. Меня лично большое количество If-ов грузят. Я даже термин придумал "логическая сложность". И даже придумал как избавится от этих дел применяя события. Получается проще.. логически проще..
Re[5]: Как упростить код
От: batu Украина  
Дата: 19.04.12 16:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, batu, Вы писали:


B>>>>Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...


L>>>Предположим, добавился condition3. В этом случае переписывать придется все case-ы.

B>>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней

L>Нет, и редактировать, и читать  if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот.

Ну-ну.. А наоборот то зачем? Вот когда таких If-ов будет много.. И надо в каждую ветку въезжать и отлаживать.. Вспомнишь этот вариант.. Тут прелесть в том, что все ветки независимы.. И редактируются незавсимо.. И ничего не напортишь нечаянно рекдактируя в другой ветке..
Re[6]: Как упростить код
От: Lloyd Россия  
Дата: 19.04.12 18:27
Оценка:
Здравствуйте, batu, Вы писали:

L>>Нет, и редактировать, и читать  if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот.

B>Ну-ну.. А наоборот то зачем?

Существует мнение, что код чаще читают, чем пишут. Вот для таких случаев и нужна обратная конвертация.
Re[7]: Как упростить код
От: batu Украина  
Дата: 19.04.12 18:34
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, batu, Вы писали:


L>>>Нет, и редактировать, и читать  if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот.

B>>Ну-ну.. А наоборот то зачем?

L>Существует мнение, что код чаще читают, чем пишут. Вот для таких случаев и нужна обратная конвертация.

Правильное мнение.. И редактируют тоже..Но зачем тут обратная?.. Так же сверху вниз и читается.. Вот и If-ами приходитися вверх-вниз и обратно.. и не один раз пока въедешь. Или я не понял смысла слова "обратная конвертация". Это как?
Re[8]: Как упростить код
От: Lloyd Россия  
Дата: 19.04.12 20:41
Оценка:
Здравствуйте, batu, Вы писали:

L>>Существует мнение, что код чаще читают, чем пишут. Вот для таких случаев и нужна обратная конвертация.

B>Правильное мнение.. И редактируют тоже..Но зачем тут обратная?..

Зачем, чтобы понять, что такая-то форматная строка будет использована для такого-то случая.

B>Так же сверху вниз и читается.. Вот и If-ами приходитися вверх-вниз и обратно.. и не один раз пока въедешь.


Так и есть, но ты из этого делаешь странный вывод, что мол надо эту совокупность condition-ов оттранслировать в число и использовать его. При этом прыгать все равно придется (для того, чтобы понять что именно означает case = 3).
Имхо, более логичным было бы предложить убрать вложенность этих if-ов сведя их к "плоским" if-ам.

B>Или я не понял смысла слова "обратная конвертация". Это как?


Прямая конвертация из condition-ов — это конвертация condition-ов в число, соответственно, обратная — наоборот. Что тут непонятного?
Re[9]: Как упростить код
От: batu Украина  
Дата: 20.04.12 05:37
Оценка:
Здравствуйте, Lloyd, Вы писали:


L>Так и есть, но ты из этого делаешь странный вывод, что мол надо эту совокупность condition-ов оттранслировать в число и использовать его. При этом прыгать все равно придется (для того, чтобы понять что именно означает case = 3).

L>Имхо, более логичным было бы предложить убрать вложенность этих if-ов сведя их к "плоским" if-ам.

Ты считаешь что прыгать среди вложеных If-ов легче? И в реальных задачах не симпатичные кодишен 1-2-3, а довольно не простые выражения тоже выносящие мозги. Плоские звучит хорошо.. А что за зверь?
Re[10]: Как упростить код
От: _d_m_  
Дата: 20.04.12 07:00
Оценка:
Здравствуйте, batu, Вы писали:

B>Ты считаешь что прыгать среди вложеных If-ов легче? И в реальных задачах не симпатичные кодишен 1-2-3, а довольно не простые выражения тоже выносящие мозги. Плоские звучит хорошо.. А что за зверь?


Nemerle рулит

Смотри пример hardcase-а с Patern Matching
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: Как упростить код
От: Tigor Россия  
Дата: 20.04.12 07:57
Оценка:
Можно укомпактить

return
    condition1 
        ? (condition2 ? string.Format( "{0}", p[1]) : string.Format( "{0}-{1}", p[1], p[0]))
        : (condition2 ? string.Format( "{0:N3}", p[1]) : string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0]))


И может быть тут лучше не использовать странные имена и массив из двух элементов.
Возможно, вместо массива надо использовать некий объект, куда и запихнуть форматирование.
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re: Как упростить код
От: Tigor Россия  
Дата: 20.04.12 08:03
Оценка:
Здравствуйте, Аноним, Вы писали:

string.Format( "x:{0:N3} y:{0:N3}", p[1], p[0] );

И ваще тут явная бага ))
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re[12]: Как упростить код
От: _d_m_  
Дата: 22.04.12 12:39
Оценка:
Здравствуйте, batu, Вы писали:

___>>Nemerle рулит


___>>Смотри пример hardcase-а с Patern Matching

B>А в двух словах сюда?

Епп...ерный театр. Тв ветку вообще читаешь? Re[5]: Как упростить код
Автор: hardcase
Дата: 17.04.12
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: Как упростить код
От: vdimas Россия  
Дата: 22.04.12 14:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот такой лабиринт,


Разве что, поменять местами проверки для совпадения сигнатур, чтобы использовать тернарный оператор:
return condition2 ?
  string.Format(condition1 ? "{0}" : "{0:N3}", p[1]) :
  string.Format(condition1 ? "{0}-{1}" : "x:{0:N3} y:{1:N3}", p[1], p[0]);


А вообще, вовсе не принципиально для 4-х строк значащего кода.
Любое компактное описание читается заведомо хуже "объемного", если в коде идет логика ветвления по нескольким переменным.

==========
Тут еще правильный был намек на таблицу, он подходит для большого кол-ва булевых переменных. Но для доведения этого намека до ума надо по-другому закодировать состояния, чтобы ветвиться только по одной переменной.
Re[14]: Как упростить код
От: _d_m_  
Дата: 23.04.12 00:08
Оценка:
Здравствуйте, batu, Вы писали:

B>Не смотрел.. Да хороший вариант с точки зрения читабельности.. Но, мой эффективней..Это не говорит от том, что его нельзя сделать более наглядным.. Ввести вместо 1-3 перечислимые переменные "TrueTrue" и т.д... Как вариант..


Да-дад. Волосы на 87% шелковистее.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.