Avatar
Paradise
Redaktor
Avatar
Paradise:

Zdravím, dnes jsem objevil zajímavý problém. VS 12 Express mi nežere klíčové slovo var. Vůbec netuěím proč, v aplikacích je nastavený nejnovější .NET Framework. Mám ještě verzi pro Windows Phone a tam to normálně jde. Kde by mohl být problém?

 
Odpovědět 24.7.2013 13:39
Avatar
Juraj Mlich
Redaktor
Avatar
Juraj Mlich:

Kľúčové slovo var môže byť myslím iba v metodách :)

Nahoru Odpovědět 24.7.2013 13:41
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
Paradise
Redaktor
Avatar
Odpovídá na Juraj Mlich
Paradise:

Ok, jdu se zastřelit. Programování se věnuju už docela dlouho, ale tohodle jsem si nikde nevšiml. Asi to ví každý, protože jsem to nevygooglil. sdraco by mohl tohle vlákno smazat, ať mi to nekazí reputaci :D

 
Nahoru Odpovědět  +1 24.7.2013 13:44
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Paradise
Jan Vargovský:

V jaké situaci ti ho "nežere" ? :)

 
Nahoru Odpovědět 24.7.2013 13:50
Avatar
Nahoru Odpovědět  -1 24.7.2013 14:04
Nesnáším {}, proto se jim vyhýbám.
Avatar
Juraj Mlich
Redaktor
Avatar
Juraj Mlich:

Nič si z toho nerob, ja tiež už programujem dlho a tiež je niekde vlákno s tým istým obsahom. :)

Nahoru Odpovědět 24.7.2013 14:18
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

var by se měl používat jen na věci kde dopředu přímo není znám datový typ.

Editováno 24.7.2013 18:20
Nahoru Odpovědět  ±0 24.7.2013 18:17
Nesnáším {}, proto se jim vyhýbám.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Kit:

V Javě se místo var používá Object. Pokud je výsledek funkce značně polymorfní a potřebuji třeba jen metodu toString(), tak to používám. Jinak bývá s analýzou toho objektu a následným přetypováním dost práce.

Editováno 24.7.2013 18:28
Nahoru Odpovědět 24.7.2013 18:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Vargovský:

Ty si řekl, že ho nemá používat a pak mi řekneš: "používej jen tehdy...". Proto mě to zarazilo.

Kit: v Javě nění nic jako GetType() nebo typeof() ?

 
Nahoru Odpovědět 24.7.2013 18:37
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Vargovský
Kit:

V Javě je dokonce operátor instanceof a funguje velmi dobře, protože porovná třídu se všemi rodiči objektu. Praktičtější však je použít interface, protože chyby v programu odhalíš už při kompilaci.

Snad z toho pochopíš i proč se nemá používat var.

Editováno 24.7.2013 18:59
Nahoru Odpovědět 24.7.2013 18:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Kit
Jan Vargovský:

Proč zbytečně vytvářet nové třídy na to, že potřebuju prohrabat kolekci a sesbírat jen to co potřebuju, tím myslím LINQ dotazy... Já osobně si to bez klíčového slova var moc nedokážu představit :)

 
Nahoru Odpovědět 24.7.2013 19:07
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Vargovský
Kit:

Můžeš místo var použít interface pro LINQ dotaz. Nebudeš pak muset přetypovávat.

Nahoru Odpovědět 24.7.2013 19:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Kit
Jan Vargovský:

No toje jedno, zrovna toto byla věc na kterou jsem se ptal docela dost lidí i kolegů a každý mi odpověděl, že je to namístě :)

 
Nahoru Odpovědět  +1 24.7.2013 19:16
Avatar
Luboš Běhounek (Satik):

Já mám pořád pocit, že nechápete (resp. spousta lidí tu nechápe), co var dělá... :)

Editováno 24.7.2013 19:17
Nahoru Odpovědět 24.7.2013 19:17
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Asi to také nechápu. var vidím jen jako berličku pro ty, kteří nevědí, jakého typu bude výsledek výrazu. Ať žije Python, u něj je takové použití zcela běžné, dokonce tam to slovo var ani není. Přitom se také jedná o silně typovaný jazyk.

Nahoru Odpovědět 24.7.2013 19:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Proc bych mel psat cely nazev typu, kdyz si ho prekladac muze odvodit z druhe strany?

Nasledujici dva kody maji naprosto identicky vysledek a i poznam, jakeho typu promenna slovnik je, jen ten jeden zpusob ma kratsi zapis.

Dictionary<String, int> slovnik = new Dictionary<String, int>();
var slovnik = new Dictionary<String, int>();

Porad nechapu, co se vam na tom nelibi.

Nahoru Odpovědět  +1 24.7.2013 19:32
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Michal Žůrek (misaz):

psát pokaždé kdy to jde datový typ je DOPORUČENÍ. Právě prto se tím všichni musí řídit.

Nahoru Odpovědět 24.7.2013 19:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Luboš Běhounek (Satik):

Pokud by se tim kazdy musel ridit, nebylo by to doporuceni, ale spis treba pravidlo :)

Datovy typ poznas vetsinou z prave casti, takze tam v podstate je.

A odkud to doporuceni je? Potkal jsem ho jen jako doporuceni tykajici se psani MSDN napovedy (examplu), ale ne nijak obecne.

Nahoru Odpovědět 24.7.2013 19:37
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Aha, takže var není ekvivalentem třídy Object v Javě. Je to syntaktický cukr.

using System;
using System.Collections.Generic;

static class Program {
    static void Main() {
        var slovnik = new Dictionary<String, int>();
        Console.WriteLine(slovnik.GetType());
    }
}

Výsledek:

System.Collections.Generic.Dictionary`2[System.String,System.Int32]
Editováno 24.7.2013 19:49
Nahoru Odpovědět 24.7.2013 19:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek (Satik):

Přesně tak, je to jen syntaktický cukr. Jakmile jednou do proměnné var něco nacpeš, už tam žádný jiný typ nedostaneš, např.

var s="string";
s = 15;

Tě nenechá ani zkompilovat, protože hned na prvním řádku už ví, že proměnná s je typu string a také ti tak našeptává apod.

Jinak C# má vlastní třídu object, od které všechny objekty dědí a do které pak můžeš nacpat (téměř) cokoliv, to je ale něco úplně jiného.

C# ještě pak má typ dynamic, ten umí psí kusy a můžeš na něm třeba volat metody, o kterých v době kompilace ani nevíš a pokud ten objekt tu metodu nemá, tak dostaneš run-time výjimku.

Nahoru Odpovědět 24.7.2013 19:54
:)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Kit
Jan Vargovský:

Jo, to jsem vytrhl z projektu a bylo to pro celou třídu, ale kdyby to bylo jen jako nějaký result nějaké vyhledávací metody nebo tak, ukroj z toho to private :)

Editováno 24.7.2013 20:03
 
Nahoru Odpovědět 24.7.2013 20:00
Avatar
Odpovídá na Jan Vargovský
Luboš Běhounek (Satik):

zrovna

private List<List<object>> foo = new List<List<object>>();

asi ne, var můžeš používat jen uvnitř metod, na členy třídy var použít nemůžeš :)

Nahoru Odpovědět 24.7.2013 20:02
:)
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Áha, dám odpovědět a místo toho je edit -.- Znova to psát nebudu, aspoň satík zastihl mojí odpověď :D

 
Nahoru Odpovědět 24.7.2013 20:05
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 24 zpráv z 24.