NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Optional parameter ve funkci

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David Tilšer:11.9.2017 8:13

Zdravím,

nevěděl jsem jak to pořádně popsat v názvu, tak to popíšu tady.
Mám funkci s optional parametrem:
Funkce(int id, String name = "")

V tomto případě je pamatr 'name' optional a pokud ho nezadám, tak je defaultně prázdný string.
Můj problém je, že v té funkci mám další funkci, která právě tento parametr volá a já bych potřeboval, aby když ho zadám, tak aby ho funkce volala s parametrem a když ho nezadám, tak aby ho volala bez parametru
Příklad:

FunkceX(int id, String name = "")
{
FunkceY(name)
}

Já bych potřeboval udělat, že pokud FunkciX nepošlu žádný 'name', tak aby se FunkceY chovala takto - FunkceY().
Teď jak to mám napsaný, tak se chová takto FunkceY("") a to mi nefunguje. Zkoušel jsem nastavil defaultní name na null a to mi taky nefungovalo. Jak se to dělá?

Díky.

Odpovědět
11.9.2017 8:13
Odpočinek je pro slabochy.
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na David Tilšer
David Oczka:11.9.2017 8:15

Myslíš takto?

FunkceX(int id, String name = "")
{
        if(name != "")
                FunkceY(name);
        elsel
                FunkceY();
}
Editováno 11.9.2017 8:16
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
11.9.2017 8:15
Avatar
David Tilšer:11.9.2017 8:22

Jo přes If by to šlo taky, ale myslel jsem, že to půjde udělat i nějak jinak. Že třeba jde ten parametr nastavit nějakým způsobem, abych tam ten if dávat nemusel.

Nahoru Odpovědět
11.9.2017 8:22
Odpočinek je pro slabochy.
Avatar
Odpovídá na David Tilšer
Erik Šťastný:11.9.2017 8:29

Taky mě jiný způsob nenapadá, nicméně bych to udělal asi na úrovni FunkceY, ale to už záleží jaký máš vnitřní smysl. mě to tam ale sedí víc :)

FunkceX(int id, string name = "")
{
        FunkceY(name)
}

FunkceY(string name)
{
        if (name != "") //pracovat s name
}
Editováno 11.9.2017 8:31
 
Nahoru Odpovědět
11.9.2017 8:29
Avatar
David Tilšer:11.9.2017 9:44

Ještě topic nechám pár hodin nevyřešený, kdyby se náhodou našel někdo koho by napadlo ještě jiné řešení.
Nejspíš ale žádné jiné nebude, ani když jsem hledal na netu, tak jsem jiné nenašel.
Každopádně prozatím díky za odpovědi.

Nahoru Odpovědět
11.9.2017 9:44
Odpočinek je pro slabochy.
Avatar
termostat
Člen
Avatar
Odpovídá na David Tilšer
termostat:11.9.2017 11:38

Pokud je FunkceY tvoje, tak bych to řešil takto:

FunkceX(int id, string name = null)
{
  FunkceY(name);
}

FunkceY(string name = null)
{
  if (name != null)
  {
    //...
  }
}
 
Nahoru Odpovědět
11.9.2017 11:38
Avatar
Robert Poč
Člen
Avatar
Robert Poč:11.9.2017 12:19

Stejně ve FunkciY nakonec musíš testovat, zda je string prázdný, abysi se rozhodl jak to zpracovat, pak to klidně volej s výchozím/prázdným parametrem.

Pokud máš FunkciY přetíženou, pak se již ve FunkciX musiš rozhodnout, kterou FunkciY zavolat, např.

(name == "") ?  FunkceY() : Funkce(name);
 
Nahoru Odpovědět
11.9.2017 12:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.