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[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: Как упростить код
От: xobotik Россия  
Дата: 18.04.12 13:36
Оценка: :)
Здравствуйте, Аноним, Вы писали:

Сделать DSL.
С уважением!
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-ами приходитися вверх-вниз и обратно.. и не один раз пока въедешь. Или я не понял смысла слова "обратная конвертация". Это как?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.