Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Diskuze: Metoda vracející hodnotu - zápis výsledku.

C# .NET .NET (C# a Visual Basic) Metoda vracející hodnotu - zápis výsledku. American English version English version

Aktivity (3)
Avatar
Filip
Člen
Avatar
Filip:9. května 17:34

Ahoj, mám dotaz ohledně vrácení hodnoty. Která varianta je podle vás ta správná? Je mi jasné, že vytvoření další proměnné pro výpočet bude stát nějakou tu paměť a čas (což je v tomto případě dost zanedbatelné). Ovšem v 2. variantě mi zase přijde, že v případě nějakého většího výpočtu by to mohlo být trochu nepřehledné/ne­elegantní.
Děkuji za každou reakci.
Přeji hezký den.
1.varianta:

int Soucet(int a, int b)
{
        int soucet = a + b;
        return soucet;
}

2. varianta

int Soucet(int a, int b)
{
        return a + b;
}
 
Odpovědět 9. května 17:34
Avatar
Odpovídá na Filip
Erik Šťastný:9. května 18:04

Takovéto jednoduché příklady compiler většinou sám optimalizuje do druhé varianty.

 
Nahoru Odpovědět  +1 9. května 18:04
Avatar
Odpovídá na Filip
Erik Šťastný:9. května 18:12

Zde maličký příklad... Zkompiloval jsem projekt s těmito metodami...

private int FourBytesToInt(byte[] array)
{
    int res = 0;
    res += array[0] * 256 * 256 * 256;
    res += array[1] * 256 * 256;
    res += array[2] * 256;
    res += array[3];
    return res;
}

private byte[] IntToFourBytes(int intValue)
{
    byte[] array = new byte[4];
    array[0] = (byte)(intValue >> 24);
    array[1] = (byte)(intValue >> 16);
    array[2] = (byte)(intValue >> 8);
    array[3] = (byte)intValue;
    return array;
}

Pomocí dekompilace jsem dostal zpátky už jen tohle... zvláštně dobrá je druhá metoda, kde to zůstalo vše v returnu.

private int FourBytesToInt(byte[] array)
{
  return 0 + (int) array[0] * 256 * 256 * 256 + (int) array[1] * 256 * 256 + (int) array[2] * 256 + (int) array[3];
}

private byte[] IntToFourBytes(int intValue)
{
  return new byte[4]
  {
    (byte) (intValue >> 24),
    (byte) (intValue >> 16),
    (byte) (intValue >> 8),
    (byte) intValue
  };
}
Editováno 9. května 18:13
 
Nahoru Odpovědět 9. května 18:12
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Filip
Marian Benčat:9. května 18:35

takovéto jednoduché příklady compiler vůbec nebude dělat jako metodu, ale prostě je inline-ne.

Nahoru Odpovědět 9. května 18:35
Totalitní admini..
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Erik Šťastný
Marian Benčat:9. května 18:36

To co si poslal je decompile určitě develop codu.. jinak ti compiler vždycky spočítá konstanty, pokud mu v tom nic nebrání.

Nahoru Odpovědět  +2 9. května 18:36
Totalitní admini..
Avatar
Filip
Člen
Avatar
Filip:9. května 18:55

Dekuji. Nasel jsem si priklad: Posloupnost naplnena x poctem cisel. Mam v ni najit nejvetsi a nejmensi cislo a udelat z nej rozdil a zaroven udelat soucin ze sudych cisel. Bohuzel, jsem nikde nenasel spravne reseni, mohl by mi to někdo zkontrolovat prosim? Samozrejme program pracuje jak ma, jde mi hlavně o optimalizaci.
Btw. jedná se o C++ konzolovou aplikaci, nedopatrenim jsem toto tema zalozil v .NET sekci, omlouvam se.
Děkuji

int PosloupnostCisel(int &roz, int pp);

int main()
{
        int pocetPrvku, roz = 0, soucin;
        cin >> pocetcisel;

        soucin = PosloupnostCisel(roz, pocetcisel);

        if (soucin == 0)
                cout << "Soucin nelze vypocitat, protoze se v posloupnosti nenachazi sude cislo" << endl;
        else
                cout << "Soucin: " << soucin << endl;

        cout << "Rozdil nejvetsiho cisla a nejmensiho cisla je: " << roz << endl;

        system("pause");
    return 0;
}

int PosloupnostCisel(int &roz, int pp)
{
        int cislo, soucin = 1, maximum = -RAND_MAX, minimum = RAND_MAX;
        bool kontrolaSoucinu = false;

        for (int i = 1; i <= pp; i++)
        {
                cout << "Zadej cislo: ";
                cin >> cislo;

                if (cislo > maximum)
                        maximum = cislo;

                if (cislo < minimum)
                        minimum = cislo;

                if (cislo % 2 == 0)
                {
                        soucin *= cislo;
                        kontrolaSoucinu = true;
                }
        }

        roz = maximum - minimum;

        if (kontrolaSoucinu)
                return soucin;
        else
                return 0;
}
Editováno 9. května 18:57
 
Nahoru Odpovědět 9. května 18:55
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 6 zpráv z 6.