NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
jt.e
Člen
Avatar
jt.e:6.10.2015 14:26

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
Odpovídá na jt.e
Ondřej Krsička:6.10.2015 19:54

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:6.10.2015 20:21

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
Odpovídá na jt.e
Ondřej Krsička:6.10.2015 20:25

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:6.10.2015 20:43

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
Odpovídá na jt.e
Patrik Valkovič:6.10.2015 20:58

Ř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.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 Valkovič
jt.e:6.10.2015 21:16

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
6.10.2015 21:16
Avatar
David Dostal
Tvůrce
Avatar
Odpovídá na jt.e
David Dostal:6.10.2015 21:18

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 Valkovič, 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
6.10.2015 21:18
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na jt.e
Milan Křepelka:7.10.2015 8:07

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
7.10.2015 8:07
Avatar
jt.e
Člen
Avatar
Odpovídá na Milan Křepelka
jt.e:7.10.2015 19:10

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:7.10.2015 19:27

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.