Duża liczba parametrów w metodzie

0

Cześć. Potrzebuję(chyba jeszcze myślę jak to w inny sposób rozwiązać ) pisać metody które mają po 100 parametrów i więcej. Czy poniższa konstrukcja jest poprawna?

 Metoda(List<double> ...)

Nie wiem jak to zrobić, może zrezygnuje z parametrów, bo przecież nie będę wypisał 100 i więcej parametrów.

0

Taka konstrukcja pozwala mieć jeden parametr będący listą liczb, a nie 100 parametrów.

3

Chyba o to chodziło:

class Program
    {
        static void Main(string[] args)
        {
            Foo(1, 2, 3, 4, 5);
        }
        static void Foo(params int[] tab)
        {
           foreach(int element in tab)
            {
                Console.WriteLine(element);
            }
        }
    }
0

Chodziło mi to, żeby to była "lista parametrów", raczej wolałbym nie używać tablic parametrów.

0

Dla list to na przykład tak:

class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>();

            for (int i = 1; i <= 5; i++)
            {
                list.Add(i);
            }

            Foo(list);
        }
        static void Foo(List<int> tab)
        {
            foreach(int element in tab)
            {
                Console.WriteLine(element);
            }
        }
    }
2

Potrzebuję(chyba jeszcze myślę jak to w inny sposób rozwiązać ) pisać metody które mają po 100 parametrów i więcej.

Chciałbym zobaczyć jak wywołujesz taką metodę. Poważnie. I do tego jak robisz to nie myląc na przykład kolejności tych twoich parametrów. A potem jak siwiejesz próbując ten kod debugować. Idę o zakład że te parametry da się pogrupować w jakieś sensowne klasy...

0

Parametry są już pogrupowane w klasy, ale w tych klasach parametry dalej są różne np. ( cena złota, cena srebra .. itd.) i to będzie należeć do jednej klasy itd. Kwestia tego, że jest tego dużo,
ilość parametrów będzie znana na daną chwile. Mam zmienić kod, w którym wcześniej było 5 parametrów, a teraz ilość jest powyżej 100.

1

W takim razie chcesz mieć JEDEN parametr, który będzie kolekcją, a nie DUŻO parametrów.

0

Może po prostu wstaw swój kod tego co masz.

4

@andrzejek jedyne co mogę ci zalecić:
user image
Poważnie. Bo nie wyobrażam sobie kodu który takiego potworka wywołuje a co dopiero jakby go miał używać. Wyczuwam tutaj ekstremalny copy-paste. Zaręczam ci że z czymś takim będzie dużo więcej problemu niż z przepisaniem tego po ludzku.

0

A mniejsza z tym. Dostałem to zadanie w pracy, bo wszyscy programiści się ulotnili a nawet nie jestem programistą. I klas mam nie zmieniać. Mam wrażenie, że sobie ze mnie przysłowiowe jaja robią.

1

Masz najprawdopodobniej zły pomysł na refaktoryzację kodu. Skoro na początku mamy 5 parametrów i nagle ilość rośnie do 100 to oznacza, zgaduję lecz pewno nie mylę się zbytnio, że chcesz w parametry upchnąć coś co powinno być reprezentowane przez

  • kolekcję - nienazwane i niezależne parametry jednego typu
  • tablicę - jw. przy czym parametry są zależne bądź kolejność ma znaczenie
  • strukturę - parametry są nazwane tzn. każdy z nich reprezentuje tak naprawdę trochę inny byt (cena złota, cena srebra, cena buttcoina itd.) i jest użyty w metodzie w znaczący sposób (ifologia).

Inna sprawa to kwestia tego czy metoda, która już teraz przyjmuje 5 parametrów nie jest przez przypadek przeładowana.

0

bo wszyscy programiści się ulotnili a nawet nie jestem programistą

No biorąc pod uwagę jakie "taski" mają w tej firmie to ja im się nie dziwię. Tobie też zalecam takie wyjście ;]

1

w WinAPI powszechnie stosowaną metodą jest (a przynajmniej było jak tym programowałem) upakowywanie parametrów w struktury i żądanie przez funkcje podania wskaźnika do tej struktury.

Więc mysle. że tak mozna by zrobić chociazby.

0

jezeli jest 100 parametrow to ile linijek musi byc :D?

2

Mały OT. Jak wyglądałoby w Clipperze wywołanie funkcji ze 100 parametrami, zdecydowana większość (a może wszystkie) ma wartości domyślne, chcemy w wywołaniu zmienić 50-ty i setny parametr.
Definicja:

FUNC oCholera(z1,z2,z3,z4,....
IF z1 == NULL
   z1 = 35
ENDIF
...
IF z100 == NULL
  z100 = "jasna d*a"
ENDIF

Wywołanie:

oCholera(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,204)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.