« 1 2
Autor Zpráva
Mastodont
Profil
blizz_boz
Tak ses tu vyblinkal a teď bys nám mohl ještě říci, jaký je zásadní rozdíl mezi
$len = strlen($stringVar);
int length = stringVar.Length;

Při volání té vlastnosti Length se nic interně nepočítá, že? :-)))
imploder
Profil
Mastodont
Při volání té vlastnosti Length se nic interně nepočítá, že? :-)))
Když je to vlastnost (členská proměnná) a ne členská funkce, tak by se nic počítat nemělo, ne?
Mastodont
Profil
imploder
Vlastnosti jsou implementovány pomocí get/set metod a v těch může být teoreticky cokoli. Já zdrojáky NETu nemám, ale možnosti jsou v zásadě dvě:
1. Délka stringu se zjistí ihned po přiřazení nové hodnoty a uloží do interní členské proměnné.
2. Délka stringu se zjistí v getteru vlastnosti.
Chamurappi
Profil
Reaguji na Mastodonta:
možnosti jsou v zásadě dvě
Ta první bude blíže pravdě, protože string je neměnný objekt. Každá jeho zdánlivá změna vede ve skutečnosti k výrobě nového stringu.
Joker
Profil
Timy
Co znamená "čistě objektové"? IMHO takový C# je dost čistě objektový :-).
Hmm, nepletu-li se, v C# (a i v Javě) existují primitivní datové typy, které nejsou objekty?
Ale jak jsem psal, Smalltalk je snad jediný jazyk co znám, kde třeba i příkaz 5+1 je objektová operace (pětka i jednička jsou objekty, pětce se pošle zpráva "+", jejímž parametrem je jednička)

blizz_boz
v normalnom OO jazyku je vsetko objekt aj retazec sa sprava ako objekt
No krása :D Tak tedy kontrolní otázka: Jmenujte tři "normální OO jazyky", kde "je všechno objekt". Nejlépe aby k nim existovalo dost materiálů, ze kterých by se začátečník mohl učit. A to jsem výše napsal Smalltalk, tak už jen dva další ;-)

imploder
Před pár dny jsem viděl na nějaké stránce benchmark, ze kterého vyplývalo, že objekty jsou v PHP několikanásobně náročnější než klasický přístup.
Zhruba to samé napsal před nějakým časem i M. Malý aka Arthur Dent (autor bloguje.cz)
_es
Profil
Chamurappi
... protože string je neměnný objekt. ...

No ak myslel Mastodont programovacie jazyky všeobecne, tak to neplatí.
Napríklad v C je (jednoduchý) string len pole znakov ukončené nulovým znakom a každý znak v ňom možno ľubovolne zmeniť.
Aj pre iné implementácie stringu v C, napríklad s viacbajtovými znakmi, to je možné.
Podobne to bude aj v C++, keďže tam je len k tomu pridaný nejaký objektový obal.
Ak by bol string uložený v UTF-8, tak zistiť jeho počet znakov nemusí byť až tak jednoduché.
Chamurappi
Profil
Reaguji na Jokera:
nepletu-li se, v C# (a i v Javě) existují primitivní datové typy, které nejsou objekty
Nemýlím-li se, v C# je všechno podtypem System.Object.

Jmenujte tři "normální OO jazyky", kde "je všechno objekt".
Smalltalk, C#, Ruby. Vyhrávám něco? :-)


Reaguji na _es:
Mastodont zjevně myslel programovací jazyky, které přistupují ke stringu jako k objektu. Konkrétně zmínil .NET, ale totéž platí pro Javu. (V obou existují i pouzdra pro změnitelné řetězce, ale konkrétně string je neměnný.)
Mastodont
Profil
Psal jsem obecně o implementaci vlastností v OO jazycích. NET má vlastnost Length, v Javě je metoda length(), IMHO oboje pracuje v zásadě stejně. V každém případě se ta délka stringu někde zjistit musí a jestli se předpočítá nebo zjišťuje až v getteru, je jedno. Na blábolovitost příspěvku blizz_boze to nemá vliv :-)
Timy
Profil
Joker
Potřebnou teorii jsem nedohledal, ale třeba tohle funguje:

public static void Main()
{
    zkouska(1);
    zkouska(false);

    Console.Read();
}

public static void zkouska(object obj)
{
    Console.WriteLine(obj.ToString());
}


Typ parametru je object a sežere to i číslo, i bool hodnotu true a ještě na to následně aplikuje metodu ToString().
« 1 2

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: