| Autor | Zpráva | ||
|---|---|---|---|
| Mastodont Profil |
#1 · Zasláno: 20. 2. 2009, 20:38:59
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 |
#2 · Zasláno: 20. 2. 2009, 21:35:21
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 |
#3 · Zasláno: 20. 2. 2009, 22:16:18
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 |
#4 · Zasláno: 20. 2. 2009, 22:28:33 · Upravil/a: Chamurappi
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 |
#5 · Zasláno: 20. 2. 2009, 22:42:29
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 |
#6 · Zasláno: 21. 2. 2009, 07:51:10
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 |
#7 · Zasláno: 22. 2. 2009, 03:32:05
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 |
#8 · Zasláno: 22. 2. 2009, 08:49:09 · Upravil/a: Mastodont
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 |
#9 · Zasláno: 22. 2. 2009, 10:58:38
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(). |
||
|
Časová prodleva: 17 let
|
|||
0