Jakieś sposoby w c# na pozbycie się if'ów?

0

Znacie jakieś sposoby ewentualnie tuturiale na pozbywanie się if'ów w Applikacjach? Ostatnio przeczytałem, że instrukcji warunkowych procesor bardzo nie lubi, a sam kod jest mniej czytelny. Ale czy są jakieś sposoby, na całkowite się ich pozbycie? W Javie widziałem na przykład "assert", a czy c# ma jakieś odpowiedniki?

Przykład kodu w którym instrukcje warunkowe mi się nie podobają:

    public class OneVariables : FileBuilder
    {
        public override void WriteToFile()
        {
            using (BinaryWriter binaryWriter = GetBinaryWriter())
            {
                if ((variableData.integerNums == null) && (variableData.realNums == null))
                {
                    MyBaseExceptions.SeeNoticeOfManyVariables();
                }

                else if (variableData.integerNums != null)
                {
                    binaryWriter.Write(variableData.integerNums.Count());

                    for (int i = 0; i < variableData.integerNums.Count() - 1; i++)
                    {
                        binaryWriter.Write(variableData.integerNums[i]);
                    }
                }
                else if (variableData.realNums != null)
                {
                    binaryWriter.Write(variableData.realNums.Count());

                    for (int i = 0; i < variableData.realNums.Count() - 1; i++)
                    {
                        binaryWriter.Write(variableData.realNums[i]);
                    }
                }
            }
        }

Innym przykładem mogą być też checkBox'y, RadioButtony. Jeśli mamy ich dużo w jednej funkcjonalności w kodzie robi nam się chaos:

if (( ***.Checked) || (***.Checked) && ( !(***.Checked))
{
  // jakiś kod.
} 

Za wszystkie wskazówki wielkie dzięki.

3

Nie gwałcenie SOLID jest jedną z lepszych technik na pozbywanie się ifów.

2

Jeśli chodzi o checkboxy to najprostsza skuteczna technika to wydzielenie

( ***.Checked) || (***.Checked) && ( !(***.Checked) 

do osobnej odpowiednio nazwanej metody jeśli logikę masz z code-behind i potem używasz np. IsDataValid()

Jeśli korzystasz z bindingu warto w obiekcie, na którym operujesz w tym miejscu wystawić odpowiednie property z samym get'em.

Co do kodu na górze odpowiedzią, której szukasz jest polimorfizm, trzeba mieć takie obiekty, na którym można wywołać jakąś metodę, a one same się obsłużą, a nie sprawdzanie if'em czy mają uzupełnione jakieś właściwości, bo mogą być liczbami całkowitymi albo liczbami rzeczywistymi.
0

To w zasadzie był tylko przykład mi chodzi o "uwolnienie się od if'ów" jeśli są one zbędne w kodzie.

0

Jak sa zbedne w kodzie, to mozna je po prostu wywalic, nie?:)

3

odpowiem ci najprościej. źle przyjmujesz założenie. nie zakładaj ze jeśli coś jest to ok kontynuuje w ifie bo generujesz zagnieżdzenia.
przyjmij ze jeśli czegoś nie ma to spadaj - rób bramki bezpieczeństwa i jeśli coś nie przylatuje/ma złą wartość to Return null czy return 0;
nie wiem czy da się prościej wytłumaczyć :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1