Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.
А>где condition1,2 — bool тип А>p — массив double из двух элементов;
Если это весь код, то упрощать, возможно, и не надо. Всё просто и очевидно.
Если же это часть большого куска однотипных проверок условий, который большой и растёт, то можно разово сформировать набор правил типа
List<Tuple<Predicate<bool[]>, Func<object[], string>>> formattingRules; // Да, я знаю, что читается плохо, можно свои классы ввести, будет гораздо лучше;
Здравствуйте, 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]);
Здравствуйте, xvost, Вы писали:
X>Здравствуйте, andyag, Вы писали:
A>>Расскажите пожалуйста разницу между
X> X>Рву волосы на попе. В ночи не заметил что там return'ы
Не поверите — были те же ощущения, когда ваш решарпер ткнул меня в такой код носом
Здравствуйте, Аноним, Вы писали:
А>где 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 и вернуться к изначальному варианту.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
H>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.
Здравствуйте, _d_m_, Вы писали:
H>>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.
___>Как?
Завести переменную для форматной строки.
В зависимости от условий присвоить переменной то или иное значение.
Использовать форматную строку в string.Format
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, _d_m_, Вы писали:
H>>>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.
___>>Как?
L>Завести переменную для форматной строки. L>В зависимости от условий присвоить переменной то или иное значение. L>Использовать форматную строку в string.Format
L>
Здравствуйте, _d_m_, Вы писали:
L>>Завести переменную для форматной строки. L>>В зависимости от условий присвоить переменной то или иное значение. L>>Использовать форматную строку в string.Format
L>>
___>И где здесь PM?
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 вряд ли будет иметь место Маленькие классы — гуд, гуд и еще раз гуд.
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, Lloyd, Вы писали:
L>>Здравствуйте, _d_m_, Вы писали:
H>>>>Незачем упрощать этот код на C#, он и так понятен (в языках с PM можно переписать несколько иначе). Можно лишь привести к виду где лишь один вызов string.Format.
___>>>Как?
L>>Завести переменную для форматной строки. L>>В зависимости от условий присвоить переменной то или иное значение. L>>Использовать форматную строку в string.Format
L>>
___>И где здесь PM?
Ключевые слова выделены жирным. Очевидно, что C# не входит во множество языков с поддержкой сопоставления с образцом на уровне синтаксиса, так что кода на нем не приведу. Если интересует, как поможет здесь PM, то код будет примерно таким:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, _d_m_, Вы писали:
L>>>В коде получения форматной строки.
___>>И где код?
L>Там же, где и PM
Если нечего ответить по существу то может и не надо разводить игру в вопросы и загадки как ты постоянно делаешь.
Я жду примера кода с PM от hardcase или от кого-то тоже адекватного.
Здравствуйте, _d_m_, Вы писали:
___>>>И где код?
L>>Там же, где и PM
___>Если нечего ответить по существу то может и не надо разводить игру в вопросы и загадки как ты постоянно делаешь.
А может это лучше тебе начать читать то, что тебе пишут и перестать прикидываться дурачком?
___>Я жду примера кода с PM от hardcase или от кого-то тоже адекватного.
Здравствуйте, Lloyd, Вы писали:
___>>Если нечего ответить по существу то может и не надо разводить игру в вопросы и загадки как ты постоянно делаешь.
L>А может это лучше тебе начать читать то, что тебе пишут и перестать прикидываться дурачком?
Ты лично не написал ничего информативного, только всякую пургу, впрочем как обычно.
Здравствуйте, _d_m_, Вы писали:
L>>А может это лучше тебе начать читать то, что тебе пишут и перестать прикидываться дурачком?
___>Ты лично не написал ничего информативного, только всякую пургу, впрочем как обычно.
Я указал, как можно устранить вызов множественного string.Format
Если у тебя были сложности с извлечением информации из того поста, то боюсь, "проблемы на вашей стороне".
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#, но ход мысли такой.. С форматированием тоже не знаком.. Что там написано не пойму, но возможно часть тоже можно поготовить заранее.. Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...
Здравствуйте, batu, Вы писали:
B>Возможно и напутал в последовательности.. И не знаю операторов C#, но ход мысли такой.. С форматированием тоже не знаком.. Что там написано не пойму, но возможно часть тоже можно поготовить заранее.. Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...
Взаимноисключающие параграфы детектед Остается только гадать что делать в Default-случае, ибо в исходном коде ситуации таковой небыло.
Идея с конечным автоматом хороша лишь при условии, что подобный автомат строится машиной, а не человеком. Добавлять дополнительные состояния в него — сущий ад.
Здравствуйте, 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-ы по любому будет муторней
Здравствуйте, batu, Вы писали:
B>>>Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...
L>>Предположим, добавился condition3. В этом случае переписывать придется все case-ы. B>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней
Нет, и редактировать, и читать if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, batu, Вы писали:
B>>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней
H>C If-ами поток управления очевиден. С арифметикой — нет.
Я не говорил что выбрал удачно арифметику.. На кухне рис готовился.. Но по любому больше двух уровней If-ов создают напряжение. Это вроде как в линейку.. Проще отследить.. Если у вы считаете по другому имеете право. Меня лично большое количество If-ов грузят. Я даже термин придумал "логическая сложность". И даже придумал как избавится от этих дел применяя события. Получается проще.. логически проще..
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, batu, Вы писали:
B>>>>Мне кажется в таком виде будет и наглядней и при случае можно что-то изменить, да и условий добавить.. И отлаживать легче...
L>>>Предположим, добавился condition3. В этом случае переписывать придется все case-ы. B>>Это зависит от того на что будет влиять condition3. Редактировать If-ы по любому будет муторней
L>Нет, и редактировать, и читать if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот.
Ну-ну.. А наоборот то зачем? Вот когда таких If-ов будет много.. И надо в каждую ветку въезжать и отлаживать.. Вспомнишь этот вариант.. Тут прелесть в том, что все ветки независимы.. И редактируются незавсимо.. И ничего не напортишь нечаянно рекдактируя в другой ветке..
Здравствуйте, batu, Вы писали:
L>>Нет, и редактировать, и читать if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот. B>Ну-ну.. А наоборот то зачем?
Существует мнение, что код чаще читают, чем пишут. Вот для таких случаев и нужна обратная конвертация.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, batu, Вы писали:
L>>>Нет, и редактировать, и читать if-ы проще, т.к. в случае if-ов не нужно пересчитывать из condition-ов в соответствующие номера и наоборот. B>>Ну-ну.. А наоборот то зачем?
L>Существует мнение, что код чаще читают, чем пишут. Вот для таких случаев и нужна обратная конвертация.
Правильное мнение.. И редактируют тоже..Но зачем тут обратная?.. Так же сверху вниз и читается.. Вот и If-ами приходитися вверх-вниз и обратно.. и не один раз пока въедешь. Или я не понял смысла слова "обратная конвертация". Это как?
Здравствуйте, batu, Вы писали:
L>>Существует мнение, что код чаще читают, чем пишут. Вот для таких случаев и нужна обратная конвертация. B>Правильное мнение.. И редактируют тоже..Но зачем тут обратная?..
Зачем, чтобы понять, что такая-то форматная строка будет использована для такого-то случая.
B>Так же сверху вниз и читается.. Вот и If-ами приходитися вверх-вниз и обратно.. и не один раз пока въедешь.
Так и есть, но ты из этого делаешь странный вывод, что мол надо эту совокупность condition-ов оттранслировать в число и использовать его. При этом прыгать все равно придется (для того, чтобы понять что именно означает case = 3).
Имхо, более логичным было бы предложить убрать вложенность этих if-ов сведя их к "плоским" if-ам.
B>Или я не понял смысла слова "обратная конвертация". Это как?
Прямая конвертация из condition-ов — это конвертация condition-ов в число, соответственно, обратная — наоборот. Что тут непонятного?
L>Так и есть, но ты из этого делаешь странный вывод, что мол надо эту совокупность condition-ов оттранслировать в число и использовать его. При этом прыгать все равно придется (для того, чтобы понять что именно означает case = 3). L>Имхо, более логичным было бы предложить убрать вложенность этих if-ов сведя их к "плоским" if-ам.
Ты считаешь что прыгать среди вложеных If-ов легче? И в реальных задачах не симпатичные кодишен 1-2-3, а довольно не простые выражения тоже выносящие мозги. Плоские звучит хорошо.. А что за зверь?
Здравствуйте, batu, Вы писали:
B>Ты считаешь что прыгать среди вложеных If-ов легче? И в реальных задачах не симпатичные кодишен 1-2-3, а довольно не простые выражения тоже выносящие мозги. Плоские звучит хорошо.. А что за зверь?
И может быть тут лучше не использовать странные имена и массив из двух элементов.
Возможно, вместо массива надо использовать некий объект, куда и запихнуть форматирование.
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, batu, Вы писали:
B>>Ты считаешь что прыгать среди вложеных If-ов легче? И в реальных задачах не симпатичные кодишен 1-2-3, а довольно не простые выражения тоже выносящие мозги. Плоские звучит хорошо.. А что за зверь?
___>Nemerle рулит
___>Смотри пример hardcase-а с Patern Matching
А в двух словах сюда?
А вообще, вовсе не принципиально для 4-х строк значащего кода.
Любое компактное описание читается заведомо хуже "объемного", если в коде идет логика ветвления по нескольким переменным.
==========
Тут еще правильный был намек на таблицу, он подходит для большого кол-ва булевых переменных. Но для доведения этого намека до ума надо по-другому закодировать состояния, чтобы ветвиться только по одной переменной.
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, batu, Вы писали:
___>>>Nemerle рулит
___>>>Смотри пример hardcase-а с Patern Matching B>>А в двух словах сюда?
___>Епп...ерный театр. Тв ветку вообще читаешь? Re[5]: Как упростить код
Не смотрел.. Да хороший вариант с точки зрения читабельности.. Но, мой эффективней..Это не говорит от том, что его нельзя сделать более наглядным.. Ввести вместо 1-3 перечислимые переменные "TrueTrue" и т.д... Как вариант..
Здравствуйте, batu, Вы писали:
B>Не смотрел.. Да хороший вариант с точки зрения читабельности.. Но, мой эффективней..Это не говорит от том, что его нельзя сделать более наглядным.. Ввести вместо 1-3 перечислимые переменные "TrueTrue" и т.д... Как вариант..
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, batu, Вы писали:
B>>Не смотрел.. Да хороший вариант с точки зрения читабельности.. Но, мой эффективней..Это не говорит от том, что его нельзя сделать более наглядным.. Ввести вместо 1-3 перечислимые переменные "TrueTrue" и т.д... Как вариант..
___>Да-дад. Волосы на 87% шелковистее.
От сложности условий зависит.. А вот такой резкости не пойму. Мы ж обсуждаем варианты или здесь одобряются только оды Немерле?