Aki szerint a segédváltozó szebb és kifejezőbb, azt fejbe rúgom. :)
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 1854 megtekintés
Hozzászólások
A segedvaltozo nem jobb es nem kifejezobb! :-)
Ezzel egyutt orulok, hogy Javaban es C#-ban nincs. Csak visszaelnenek vele...
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
C#-ban van goto: http://msdn.microsoft.com/en-us/library/13940fs2.aspx
- A hozzászóláshoz be kell jelentkezni
Van, pont azért, mert néha kell, mint a fenti esetben, mikor egy foreachon belül lévő switch-case-ből kellene break-el kilépni, amit nem lehet, mert a breakkal csak egy sizntet tudsz ugrani.
Szerinted miért írtam, hogy C#+foreach+switch? :)
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
C#-ban nincs labeled break? Úgy látszik a Java mégsem annyira elmaradott nyelv a C#-hoz képest. :)
- A hozzászóláshoz be kell jelentkezni
Másik dolog amit c# nem tud azok az anonim osztályok. Viszont vannak tuple jellegű anonim típusok, ami meg javaban nincs.
- A hozzászóláshoz be kell jelentkezni
Vannak anonym osztalyok.
- A hozzászóláshoz be kell jelentkezni
Akkor most fordítsd le magadban az Anonymous Types kifejezést, majd olvasd el még egyszer mit írtam. Amire én gondoltam anonim osztály alatt, az ez: http://stackoverflow.com/questions/191013/can-a-c-sharp-anonymous-class…
- A hozzászóláshoz be kell jelentkezni
Azért elég ritka, hogy kelljen. Másrészt nekem úgy tűnt, hogy Java-ban nagyon sokszor a delegáltak helyett használják az anonym osztályokat, amire C#-ban van(nak) sokkal szebb és egyszerűbb megoldás(ok).
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Egyetértek.
- A hozzászóláshoz be kell jelentkezni
Sajnos meg mindig nem vagyok gondolatolvaso, hamarabb kellett volna linkelni.
- A hozzászóláshoz be kell jelentkezni
Javaban anonim osztályt _csak_ adott interfacehez vagy osztályhoz lehet írni:
Object obj = new Object {
public String toString() {
return "Hello";
}
}
Runnable r = new Runnable {
public void run() {
System.out.println(obj);
}
}
Ha ezt tudod, akkor elég egyértelmű miről van szó, ha meg nem akkor tessék előbb utánaolvasni. :)
- A hozzászóláshoz be kell jelentkezni
Teny, regen volt mar dolgom javaval. :)
- A hozzászóláshoz be kell jelentkezni
De, van.
- A hozzászóláshoz be kell jelentkezni
Attól, hogy a goto-t break-nak hívod, attól még az egy goto.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Jo, eltevedtem egy kicsit. De az ilyen bonyolult dolgokat en amugy is kulon fuggvenybe szoktam kiszervezni, es a return meg kilep mindenhonnet... raadasul elegans is :-)
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:
()=()
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()
- A hozzászóláshoz be kell jelentkezni
da mastah codah
- A hozzászóláshoz be kell jelentkezni
Te sose tanulod meg, hogy ha valamit nem tudsz, akkor utánanézz? Ha már mindenáron hozzá kell szólnod.
- A hozzászóláshoz be kell jelentkezni
hubazz, nagyon kemeny vagy...
--
"Pont attól akartam megkímélni magam, hogy gondolkodni kelljen ;)" (lajos22)
- A hozzászóláshoz be kell jelentkezni
Az állapotváltozót nem azért használjuk a goto helyett, mert szebb...
- A hozzászóláshoz be kell jelentkezni
Hanem?
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Ja, ez engem is érdekel, mert nem nagyon látom be, hogy egy eszközt miért kell a sátáni eszköztár részének tekinteni azért, mert lehet annak segítségével szarul is megcsinálni valamit.
- A hozzászóláshoz be kell jelentkezni
Szerintem nem a "sátáni eszköztár" része, de kerülendő, mert könnyű vele átláthatatlan és nehezen karbantartható kódot írni. Ha a programot többen módosítják és van köztük kezdő, tapasztalatlan vagy béna programozó akkor mindenki életét meg tudják keseríteni vele.
Általában goto nélkül is lehet szép és hatékony kódot írni (nyilván konkrét esettől függ hogy indokolt-e a használata vagy nem).
- A hozzászóláshoz be kell jelentkezni
Igen, ezzel tisztában vagyok, a bajom az, hogy amikor egy nyelvből kihagyják, illetve amikor pl. oktatás során "aki GOTO-t használ, az automatikusan egyes" szemléletet nyomatják, az igenis a sátáni eszköztárba tartozást sugallja.
- A hozzászóláshoz be kell jelentkezni
Amikor valaki még csak kezdi tanulni a programozást, akkor szerintem jó ha azt hallja, hogy ne használjon GOTO-t, mert így nem szokik hozzá, hogy össze-vissza tud ugrálni a program flowban. Amikor meg már valamennyire tud programozni, akkor majd rájön hogy azért jól jön néha az a goto. Szerintem nincs ezzel semmi baj, egy kezdő és egy tapasztaltabb programozónak másképp kell hozzáállnia a kérdéshez.
- A hozzászóláshoz be kell jelentkezni
Elmúlt 10 évben talán ha 3x kellett gotot használnom, amiből egyik meg se maradt, mert félúton át lett dolgozva a kód és már nem volt szükség rá. Nem kell túldramatizálni ezt a "jaj, mi történhet vele" dolgot.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Bónusz, meg lehet nézni, hogy mi lesz a segédváltozóból egy normálisabb fordító esetén (VS2010, C++, release profil):
int _tmain(int argc, _TCHAR* argv[])
{
00A01000 push esi
bool done = false;
srand (time(NULL));
00A01001 push 0
00A01003 call dword ptr [__imp___time64 (0A020A8h)]
00A01009 push eax
00A0100A call dword ptr [__imp__srand (0A020A0h)]
00A01010 mov esi,dword ptr [__imp__rand (0A0209Ch)]
00A01016 add esp,8
00A01019 lea esp,[esp]
while (!done)
{
int r = rand() % 10;
00A01020 call esi
00A01022 cdq
00A01023 mov ecx,0Ah
00A01028 idiv eax,ecx
switch (r)
00A0102A dec edx
00A0102B je wmain+32h (0A01032h)
00A0102D sub edx,2
00A01030 jne wmain+20h (0A01020h)
{
case 1:
done = true;
break;
case 3:
done = true;
break;
}
}
return 0;
00A01032 xor eax,eax
00A01034 pop esi
}
(Sajnos a C# fordító alapból nem optimalizálja ki a segédváltozót).
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
(Sajnos a C# fordító alapból nem optimalizálja ki a segédváltozót).
Nem lehet, hogy a segedvaltozo valami miatt `volatile` attributummal megaldott lett? Peldaul tobbszalu kornyezetet feltetelez a fordito barmi miatt?
- A hozzászóláshoz be kell jelentkezni
Nekem a foreach-ben switch is eleve csúnya :)
- A hozzászóláshoz be kell jelentkezni
-
- A hozzászóláshoz be kell jelentkezni
Sok értékkel rendelkező enum esetén egyszerűbb, mint if-elseif-elseif-elseif-elseif-...-else hegyek.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
A kód nélkül nehéz erre bármit is mondani, de nem a switch-csel van gondom. Az persze mindenképp jobb mint a sok else if. Ha végig kell vizsgálni egy enum lehetséges példányait akkor azt vagy kiemelném onnan egy erre dedikált metódusba, vagy eleve maga az enum is végezhetné. De kód nélkül csak a levegőbe beszélek, szóval ha tényleg ez a legelegánsabb megoldás, akkor elfogadom :)
- A hozzászóláshoz be kell jelentkezni
De minek tegyem ki külön metódusba, főleg, hogy lehetne potenciálisan lehetne átadogatni egy halom változót neki paraméternek, nem keveset akár ref-ként? Konkrét eset amúgy az volt, hogy egy enumban volt megadva, hogy milyen módon dolgozza fel az elemeket, illetve az egyes elemek feldolgozott eredményei alapján történhetett az, hogy kilép az első érték után vagy csak az összes után, stb. Még a strategy pattern se adott volna itt szép eredményt túlzottan, arról nem beszélve, hogy sokkal több kód lett volna.
C#-ban meg magához az enumhoz nem tudsz kódot adni. (Meg semmi keresnivalója nincs ott).
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
C#-ot még sose használtam. Amúgy azért emelném ki, mert átláthatóbb, Egy metódus egy dolgot csináljon. Clean code :)
- A hozzászóláshoz be kell jelentkezni
Egy dolgot csinal, csak nem egyfelekepp, hanem apróbb különbségekkel. Ha szetszednem se lenne könnyebben olvashatóbb.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni