Avatar
jt.e
Člen
Avatar
jt.e:

Ahoj, mám zase jeden začátečnický dotaz:
je rozdíl ve vykonávání programu?
co raději používat a proč?

1. verze:

string a = VratTextA();
string b = VratTextB();
string vysledek = a + b;

(tato varianta je možná přehlednější, zvlášt když bych do výsledku přičítal hodně položek.)

2. verze:

string vysledek = VratTextA() + VratTextB();

(tady asi nezakládám zbytečně další proměnné)

ps, ukázkové kódy jsou samozřejmě nesmyslné, pouze pro můj dotaz

Editováno 6.10.2015 14:27
 
Odpovědět 6.10.2015 14:26
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na jt.e
Ondřej Krsička:

Přijde mi, že je to úplně jedno. Když máš víc řetězců, použiješ 1. verzi / pole a když jich máš míň, tak si vystačíš s druhou volbou.

 
Nahoru Odpovědět 6.10.2015 19:54
Avatar
jt.e
Člen
Avatar
jt.e:

to znamená, že v případě

string a = VratTextA();

je a pouze jakýsi alias pro kompilátor, aby věděl, že pokud mu zadám a má pracovat s VratTextA(), nejde tedy o vytvoření kopie stringu VratTextA()?

Editováno 6.10.2015 20:23
 
Nahoru Odpovědět 6.10.2015 20:21
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na jt.e
Ondřej Krsička:

Kopie je to v obou variantách, řekl bych.

 
Nahoru Odpovědět 6.10.2015 20:25
Avatar
jt.e
Člen
Avatar
jt.e:

já jsem to zatím chápal tak, že VratTextA() je v podstatě nově vzniklý string pomocí funkce VratTextA() a ten, když použiji jako atribut v jiné funkci (což je v uvedením příkladu "VratTextA()+Vrat­TextB()"), tak se asi vytvoří jeho kopie, ale když použiji verzi 1, tak se vytvoří kopie nově vzniklého stringu nejprve do a a pak kopie a do funkce "a+b"

 
Nahoru Odpovědět 6.10.2015 20:43
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na jt.e
patrik.valkovic:

Řešíš pitomosti. Těch něco málo tiků, které ti to vezne, je ti v dnešní době ukradených. Snažíš se porozumět optimalizaci kódu, nebo nedej bože snažíš se ho optimalizovat, aniž bys pořádně znal jazyk. Prostě takové věci zatím neřeš, je to úplně jedno.
Brzká optimalizace je cesta do pekla.

Nahoru Odpovědět  +6 6.10.2015 20:58
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
jt.e
Člen
Avatar
Odpovídá na patrik.valkovic
jt.e:

Ne jen mě zajímá, jak je to správně, aby pak někdo neřekl "které prase to psalo...", navíc pokud je to zanedbatelný rozdíl, a není to z nějakého důvodu prasárna, tak to řešit určitě nebudu (rozhodne přehlednost kódu).
Protože jsem si nebyl jistý, tak jsem se na to zeptal;)

 
Nahoru Odpovědět  +2 6.10.2015 21:16
Avatar
David Dostal
Redaktor
Avatar
Odpovídá na jt.e
David Dostal:

Navíc, alespoň se domnívám, z toho kompilátor v rámci optimalizace udělá úplně to samé. Takže, jak píše patrik.valkovic, piš to tak, aby to bylo přehledné a vůbec si nedělej starosti s případnou (doslova) nepatrnou ztrátou výkonu. Snažit se optimalizovat má smysl až v případě, kdy je program pomalý, a na místech, kde například v cyklu projíždíš velké množství dat.

 
Nahoru Odpovědět  +4 6.10.2015 21:18
Avatar
Milan Křepelka
Redaktor
Avatar
Odpovídá na jt.e
Milan Křepelka:

Tvoje myšlení se ubírá právním směrem, ale .NETu nemá takový význam. Nicméně neřešíš úplné pitomosti. Jenom na špatným místě. Jsi céčkař a optimalizuješ za pochodu. V C#rpu na sebe nemusíš být tak přísný. Od toho vyšší jazyky jsou. String je v .NETu immutable typ. Na to je potřeba pamatovat. Tedy s každou změnou(třeba i to sečtení) se dělá kopie a to bude "hrdlo". Mezi 1 a 2 nebude valného rozdílu.

Ale pokud bys měl používat sčítání stringu třeba v cyklu, tak tam už by měl optimalizovat i C#itsta použitím třídy StringBuilder
http://stackoverflow.com/…tringbuilder

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 7.10.2015 8:07
Avatar
jt.e
Člen
Avatar
Odpovídá na Milan Křepelka
jt.e:

Máš pravdu, vždy když píšu nějaký finální software, tak jsem zvyklí přemýšlet nad každým založeným bajtem (zvlášť u smyček).
Teď co jsem se pustil do .net(u), tak mě už hodněkrát překvapilo v různých zdrojácích, jak se tady nešetří. Například se hodně používá Int32, i tam kde maximální hodnota nikdy nedosáhne ani maxima BYTE. Nebo char je unicode přesto, že to někdy není potřeba... No si asi budu muset u c# trochu jinak stanovit priority.:)
Ano, StringBuilder jsem už zaregistroval a líbí se mi. Myslím při vhodném použití může cyklus hodně urychlit.

Díky všem za reakce.

Editováno 7.10.2015 19:12
 
Nahoru Odpovědět 7.10.2015 19:10
Avatar
jt.e
Člen
Avatar
jt.e:

nestihl jsem edit:
založeným bajtem (zvlášť u smyček)
mělo být:
založeným bajtem (zvlášť u databázových souborů)
přemýšlel, jsem rychleji než psal :)

 
Nahoru Odpovědět 7.10.2015 19:27
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 11 zpráv z 11.