[python] OT: překlad pojmů "first-class object" a "stream object"

Michal Vyskocil michal.vyskocil na gmail.com
Středa Duben 28 09:27:26 CEST 2010


2010/4/27 Petr Přikryl <prikryl na atlas.cz>:
>
> Michal Vyskocil
> : >Přikryl Petr
> : >...
> : > otázka, jestli je to vhodný název pro pojem
> : > (plnohodnotný objekt). Taky se k tomu můžu postavit
> : > tak, že by to nebylo vnucováno jako kodifikovaný pojem,
> : > ale prostě jako srozumitelné vyjádření -- opis významu.
> :
> : Se slovem plnohodnotný je problém, že se to vztahuje spíše k jazyku,
> : než tomu objektu. Takže při opisném použití bych asi napsal něco jako
> :
> : """
> : Objekty a funkce v Pythonu jsou plnohodnotné složky/elementy/...
> : jazyka. Mohou být použity jako argument, či návratová hodnota funkce.
> : V angličtině se označují termínem first-class object.
> : """
>
> No, tady nevím, jestli si rozumíme. Objekty jsou objekty (plnohodnotné).
> Nemůžou být ničím jiným. Jsou to objekty z definice.

Zcela urcitě si nerozumíme. Já hovořil o definici, která je například
na wikipedii

http://en.wikipedia.org/wiki/First-class_object

Pokud je něco v daném jazyce first-class objekt, pak jde o element
jazyka splňující jisté vlastnosti. Důležité je, že v tomto kontextu se
termín objekt nepoužívá ve smyslu objektu v objektovém programování,
ale prostě element jazyka. Pravdou je, že ani můj opis nebyl nijak
dobrý, protože právě toto motá dohromady.

V případě Pythonu je potom first-class objekt prakticky všechno,
dokonce i operátory, protože to jsou ve skutečnosti speciální metody
objektu. I když elementy jazyků s eval definici first-class objektů
splňují tak nějak aoutomaticky :-).

Na druhou stranu takové C má návěští, které nejsou first-class objekty
- nelze proměnné, tudíž předat funkce jako parametr, nebo vrátit jako
návratovou hodnotu. Stejné je to třeba s typy - v C není možné
deklarovat proměnnou takového typu, která je uložená v jiné proměnné.

Jen tak pro zajímavost, existují GNU rozšíření Label as a Value [1] a
Referring to a Type with typeof [2], které umožňují pracovat s
návěštími a typy jako s first-class objekty (snad až na to vytváření
za běhu).

[1] http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Labels-as-Values.html#Labels-as-Values
[2] http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Typeof.html#Typeof

-- 
best regards
     Michal Vyskocil


Další informace o konferenci Python