Keresés

Részletes keresés

ex_lx Creative Commons License 2002.02.28 0 0 43
Nem szokásom szembe dicsérni, mert én sem szeretek feszengeni, de meg kell mondjam, ahhoz képest, hogy - mint írod -, nem itthon élsz, kenterbe vered egy-egy hazai szaklap szerkesztőit.
Előzmény: KoporShow (40)
Rigel101 Creative Commons License 2002.02.28 0 0 42
szia KoporShow!

Köszi a leírást. Végülis nem fordítottam le az adott kifejezéseket, meghagytam angolul.
Egyébként a Linuxvilág című magazinban fog megjelenni a cikk. Ha jól tudom eredetileg az amerikai Linux Journal-ban jelent meg.

KoporShow Creative Commons License 2002.02.27 0 0 41
Egyebkent milyen cikket forditasz? Interneten megjelentet vagy papir ujsagbol? Hol fog megjelenni a forditas?

Előzmény: Rigel101 (39)
KoporShow Creative Commons License 2002.02.27 0 0 40
A pettern-t mintanak vagy semanak forditanam.

Programozas soran gyakran felmerülnek hasonlo jellegü probblemak: peldaul hogy biztositsuk egy struktura bejarhatosagat megfelelöen? Egy megoldas lehet hogy definialunk egy iteratort es adunk neki harom metodust: elsö, következö, ervenyes. Ezek utan C++-ban vagy Javaban a bejarast a következökepp lehet implementalni.

for( iterator.elsö ; iterator.ervenyes ; iterator.következö) { ... }

Ha az ember megjegyzi ezt a fajta megoldasi semat (visitor pattern) akkor nem kell minden egyes alkalommal elgondolkozni, hogy milyen bajarasi függvenyeket biztositsunk. Lenyegeben minden adatstrukturara adhatjuk ugyanezt a megoldast.

A fenti megoldas persze Rubyban nem idealis, mert nincs szükseg egy külön iteratorra (cursor-ra) egy struktura bejarasahoz, Rubyban van egy altalanos modszer, hogy hogy definialhatunk iteratorokat sokkal elegansabban.

A felmerülö problemak minden nyelvben azonosak, de a különbözö nyelvek különbözö kenyelmessegü megoldasokat tesznek lehetöve. Ami az egyik nyelvben esetleg idealis megoldas az lehet a masikban antipattern (kerülendö minta), mert nincs összhangban a nyelv sajatsagaival.

Amit az angol cikk iroja mondani akar az az hogy a Ruby nagyon elegans bepitett eljarasokat biztosit a fenti problemak megoldasahoz, nem kell sokat hackkelni mint mondjuk C++-ban hogy peldaul megvalositsuk a vizitor vagy singleton patternt. (Ez utobbi azt lenyegebn jelenti, hogy egy olyan osztalyunk van, amiben egyetlen objektum van. A Ruby ezt azaltal tamogatja, hogy minden egyes objektumhoz definialhatunk sajat metodusokat, azaz minden egyes objektum lenyegeben egy sajat osztalykent is viselkedik.)

Előzmény: Rigel101 (39)
Rigel101 Creative Commons License 2002.02.27 0 0 39
Sziasztok!

Megint én vagyok, mert felmerült egy-két újabb kérdés a cikkel kapcsolatban.
Az alább idézem a kérdéses mondatokat, aláhúzva azokat a kifejezéseket, amelyeket tisztázni kellene:

"Iterator is not the only pattern implemented in core Ruby. Singleton, publisher/subscriber, visitor and delegation patterns also are implemented."

Mit jelent ebben a környezetben a pattern szerintetek? A foreach utasításról is úgy beszél, mint pattern.
Valamint a második mondatban lévő szavakkal sem vagyok tisztában egészen. Mit jelentenek ezek a Ruby-ban? Fordítsam le őket szó szerint vagy hagyjam meg angolul? Esetleg van megfelelő magyar szakkifejezés ezekre?

Köszi a segítséget!

Rigel101 Creative Commons License 2002.02.24 0 0 38
Köszönöm szépen a segítséget, magyarázatokat. Hasznosak voltak. Nem garantálom, hogy pl. a mix-in kifejezésre valami korszak alakotó magyararításra leszek képes, de legalább értem, hogy miről van szó.
Mégegyszer köszönöm nektek!
KoporShow Creative Commons License 2002.02.22 0 0 37
Mivel nem magyar nyelvteruleten elek, ezert eleg nehezemre esik modern szamitastechnikai fogalmakat helyesen magyarra forditani. A lenti fogalmak magyarazataban talan segithetek.

Csak azokkal foglalkozom amikkel az lx nem:

A reflection (reflekcio,reflektivitas?) a Rubyban azt jelenti, hogy futas ido alatt lekerdezhetsz informaciokat az eppen futo program absztrakt allapotarol.

Pelda:

100.type
-> Fixnum

Azaz a szazas szam a Fixnum osztalyba tartozik.

Lekerdezehetok egy osztaly osei, egy osztalyban definialt osszes metodus, belemixelt modulok, stb. Ugyanigy egy objektumra az osszes benne definialt metodus illetve a belemixelt modulok.
Tehat a program futasa alatt is "tudataban van" a sajat belso felepitesenek. Sajnos ez nem egy totalis refelexivitas mint a LISP-ben, ahol a program a teljes le"parsolt" programkod tudataban van, es ezt tetszolegesen modosithatja. Midenesetre annyira refelexiv, amennyire ez a nyelv egyszeru kezelhetosege mellett lehetseges.

A system hook egy olyan listat jelent, ahova fuggvenyeket lehet regisztralni, amelyeknek egy bizonyos esemeny bekovetkezesekor vegre kell hajtodniuk. Peldaul megadhatod hogy bizonyos fuggvenyek hajtodjanak vegre ha egy adott valtozo megvaltozik. Vagy ha egy adott tipusu exception tortenik.

Előzmény: Rigel101 (35)
ex_lx Creative Commons License 2002.02.21 0 0 36
Hali!

A mix-in kifejezetten ruby-zsargon. Ha sikerül valami frappáns megfelelőt találnod, valszeg Tiéd lesz az első dokumentált magyar kifejezés erre. :) Ha nekem kellene valamivel helyettesítenem, akkor - fittyet hányva a szószerintiségre - a "beágyazást" vagy "beültetést" használnám.

A "namespace" létezik névterületként a magyarban. Rendszerint a programnyelvekre igaz, hogy egy adott névterületen egy adott szimbólum (változó, konstans, eljárás, függvény, metódus - ami éppen jellemző a nyelvre) csak egy példányban létezhet. Létezhet viszont ugyanaz a szimbólum más névterületen.
Magát a névterületet kijelölheti egy forrásfájl, egy modul, egy osztály, egy függvény/eljárás/metódus/kódblokk - megint csak az adott nyelvtől függően.

A többi kifejezést jó volna szövegkörnyezettel együtt látni.

Előzmény: Rigel101 (35)
Rigel101 Creative Commons License 2002.02.20 0 0 35
Sziasztok!

lenne egy-két rövid kérdésem. Egy cikket fordítok a Ruby-ról és van egy két fogalom, amit tisztázni kellene, illetve meg kellene találni a magyar megfelelőjét, ha van.

Az első a "mix-in". "Mix-ins basically allow you to mix methods...". Itt most ez egy szakzsagron, aminek van magyar megfelelője?

A következő kifejezések szintén problémásak: "namespace", "reflection", "system hook". Szó szerint le tudom őket fordítani, de mit jelentenek ezek a Ruby-ban? El tudjátok magyarázni? Vannak rájuk magyar fogalmak?

Köszönet!
Zsolt

KoporShow Creative Commons License 2002.02.06 0 0 34
A Jolt-dij egy nagyon rangos szamitastechnikai dij...:)

Oszinten szolva, en is most hallottam rola eloszor, csak annyit tudok rola, amennyit az alabb idezett cikkben, illetve a google-ben talaltam rola.

Előzmény: ex_lx (33)
ex_lx Creative Commons License 2002.02.06 0 0 33
Hali!

Bocs, de nagyon vidéki vagyok. Mit kell tudni erről a Jolt-díjról?

Előzmény: KoporShow (32)
KoporShow Creative Commons License 2002.02.06 0 0 32
A Ruby jot-dij dontos a "Languages and Development Environments" kategoriaban a Delphi 6 es C# mellett:

http://www.sdmagazine.com/jolts/press_r1-29-02.htm

kuoni pasztor Creative Commons License 2002.01.15 0 0 31
Koszi, erre gondoltam. Marmint hogy egy altalam sok alkalmazasban hasznalt kodreszt kirakok egy Ruby modulba.

k.p.

Előzmény: KoporShow (30)
KoporShow Creative Commons License 2002.01.15 0 0 30
Bocs, de valamit felrenyomtan, igy ido elott elkuldte a Mozilla a levelet, sot ketszer is, boccs.

Szoval befejezem, a

class Obejct
include A
end

Es az

include A

kodreszeletek szemantikailag ekvivalensek.

Előzmény: KoporShow (29)
KoporShow Creative Commons License 2002.01.15 0 0 29
Nem teljesen vilagos, hogy mit akarsz csinalni.

Egy C-ben irt kiterjesztest a rubyhoz, vagy egy modult rubiban?

Ez utobbi eleg konnyu feladat, egy modult lenyegeben ugyanugy lehet definialni mint az osztalyt, az egyetlen megkotes, hogy nem lehet istancialni.

Irok egy egyszeru peldat:

module A
def f(x)
puts x
end
end

Az f modulfuggvent pl. a
A::f(x)

utasitassal hivhato fel.

Ha a modul fuggvenyeit az "A::" prefix nelkul akarjuk hasznalni, akkor eloszor az

include A

parancsot kell kiadni. Ezek utan egyszeruen
pl az
f(x)
utasitas segitsegevel lehet f-et felhivni.

Egy modult nem csak a legfelso szinten, hanem egy masik modulba illetve osztalybe is be lehet mixelni, pl:

class B
include A
end

b = B.new
b.f("hi!")

mukodni fog. (Ez a mix-in)

A legfelso szinten definialt includok egyebkent az osztalyhierarhia aljara mixelodnek be, igy valnak mindenhol hasznalhatova.

Tehat pl a

class Object

Előzmény: kuoni pasztor (27)
KoporShow Creative Commons License 2002.01.15 0 0 28
Nem teljesen vilagos, hogy mit akarsz csinalni.

Egy C-ben irt kiterjesztest a rubyhoz, vagy egy modult rubiban?

Ez utobbi eleg konnyu feladat, egy modult lenyegeben ugyanugy lehet definialni mint az osztalyt, az egyetlen megkotes, hogy nem lehet istancialni.

Irok egy egyszeru peldat:

module A
def f(x)
puts x
end
end

Az f modulfuggvent pl. a
A::f(x)

utasitassal hivhato fel.

Ha a modul fuggvenyeit az "A::" prefix nelkul akarjuk hasznalni, akkor eloszor az

include A

parancsot kell kiadni. Ezek utan egyszeruen
pl az
f(x)
utasitas segitsegevel lehet f-et felhivni.

Egy modult nem csak a legfelso szinten, hanem egy masik modulba illetve osztalybe is be lehet mixelni, pl:

class B
include A
end

b = B.new
b.f("hi!")

mukodni fog. (Ez a mix-in)

A legfelso szinten definialt includok egyebkent az osztalyhierarhia aljara mixelodnek be, igy valnak mindenhol hasznalhatova.

Tehat pl a

class Object

Előzmény: kuoni pasztor (27)
kuoni pasztor Creative Commons License 2002.01.15 0 0 27
kicsit felhozom, hatha...

modult szeretnek irni. Hogy kezdjek hozza? Hogyan kell hivatkozni ra (use _modname_)? Vannak megkotesek?

Koszi elore is: k.p.

KoporShow Creative Commons License 2001.12.04 0 0 26
Erdekes link: http://www.linuxjournal.com/article.php?sid=5411&mode=thread&order=0
kuoni pasztor Creative Commons License 2001.11.23 0 0 25
KoporShow

Koszi, az elso megoldas tokeletesen kielegit. Azt akarom megvalositani, hogy eldontsem, a pattern (konkretaen egy fuggveny) egy bizonyos szekvencia (konkretan */) utan van-e vagy sem?

k.p.

KoporShow Creative Commons License 2001.11.22 0 0 24
A fo kerdes, hogy mit szeretnel elerni?

Legyen a nil kisebb vagy nagyobb mint egy igazi szam?

A nil azt jelenti, hogy a pattern nem fordult elo a sztringben. Kerdes, hogy ebben az esetben van e ertelme az osszehasonlitasnak.

Ha nil-t peldaul szeretned nullanak ertelmezni (ami persze sok esetben hulyeseg, de tegyuk fel),
akkor irhatsz egy uj metodust, hivjuk modjuk "ujindex"-nek, amit a kovetkezokepp definialsz:

class String
def ujindex(pattern)
i = index(pattern)
i ? i : 0
end
end

Es ezek utan index helyett az ujindexet hasznalod.

Egy masik megoldas, hogy ha a nilt gyakran valami szamkent akarod ertelmezni, akkor bevezetsz egy uj metodust az Object osztalyba, ami egy nilbol peldaul 0-at csinal:

class Object
def unnil
self ? self : 0
end
end

Es ezek utan index(pattern) helyett
index(pattern).unnil -t irsz.

Előzmény: kuoni pasztor (23)
kuoni pasztor Creative Commons License 2001.11.22 0 0 23
Hallo, van itt valaki? :)

Kis szegitseget szeretnek kerni, mivel nem vagyok ruby expert...

Problema a kovetkezo: Ossze kellene hasonlitanom ket valtozot, amibol az egyik (vagy mindketto) erteke nil is lehet. Van erre valami megoldas? Azt irja hibauzenetkent, hogy undefined method '>' for nil

Konkretan, amit meg szeretnek valositani:
...
pattern = "blabla"
aktLine = "mindenfele kod lehet itt"

if (aktLine.index(pattern) > aktLine.index("valami"))
...
end

jelenleg ott tartok, hogy a visszakapott ertekek mennek valtozokba, es eloszor (if valtozo) ...

ez egy kicsit bonyolultta teszi a kodot... :(

remelem erthetoen adtam elo a problemam

k.p.

Rigel101 Creative Commons License 2001.11.15 0 0 22
Adós maradtam egy válasszal, amit most igyekszem pótolni. Sajna elég eklektikus a Net hozzáférésem. :(

Nos, én OOP-t az Angster féle "Objektumorientált tervezés és programozás alapjai - Java" című könyvből tanulok. Két kötetes, de per pillanat a második rész még nem kapható. Én azért szeretem, mert ez tényleg egy tankönyv és nem egy referencia könyv, a már programozni tudóknak. Direkt a kezdőknek lett írva. Először az OO elveket mutatja be, sőt az UML-be is bevezet. Tisztázza a fontosabb fogalmakat, példákkal, feladatokkal. És ami e lényeg, hogy mindezt érthetően. Talán a programozóknak egy kicsit szájbarágós, dehát nem a profiknak készült. Csak az alapvető OO fogalmak elmagyarázása után kezd bele a tényleges programozásban. Tulajdonképpen a Java nem cél, hanem eszköz. Ez inkább OO könyv, mint Java tankönyv. De mivel nyelv is kell ahhoz, hogy gyakorlati példákat mutassunk, így az ember mellesleg a Java-t is megtanulja. Egy szó mint száz, nekem tetszik. Szerintem tanulásra első osztályú.
Pont azért akarom először átrágni magam ezen a könyvön a Ruby előtt, mert ebből az OO elvek jól megtanulhatók.

Előzmény: tomb (11)
lx Creative Commons License 2001.11.08 0 0 21
Valószínűleg igazad van. A kérdést pontosan értetted. Miután láttam a Te megoldásodat, végig is gondoltam, csak én azt hittem, hogy az osztálydefinícióban létrehozott és a dinamikusan az osztályhoz csapott változók neve is minden objektumhoz letárolódik. Ha jól dereng van is vmi metódus, amellyel le lehet csatolni egyes objektumok listájáról adott változót, az pedig így az egyszerűbb. De tényleg megeshet, hogy ilyen műveletnél az objektum kap egy másolatot az osztálytól, és a műveletet ezek után a saját névterületen hajtja végre.
Előzmény: KoporShow (20)
KoporShow Creative Commons License 2001.11.08 0 0 20
> igazi az vol-tna, ha nem tárolnám objektumonként az mezőneveket, hanem csak az osztály egy tömbjében

Ha modul_eval-t hasznalsz instance_eval helyett, akkor megsporolod az egesz hercehurcat, es a mezoneveket csak egy helyen fogja tarolni, es meg tombbel sem kell vacakolnod, mert ezt az interpreter ennel automatikusabban es gyorsabban teszi meg.

Remelem nem ertettem felre a kerdesedet, de szerintem ez a korrekt megoldas. Egy vagon szingleton-osztalyt definialni nyilvanvaloan nagysagrendekkel kevesbbe efficiens, mint egy osztalyban letarolni a dolgokat.

Előzmény: lx (19)
lx Creative Commons License 2001.11.08 0 0 19
Szevasz!

Köszi, pontosan ez volt a cél. Időközben rábukkantam az istance_eval metódusra, amellyel pontosan az Általad leírt módon adtam a dinamikusan kapott mező(neve)ket és azok értékeit - igaz, nem az osztályokhoz - az objektumokhoz.

Időközben azért eszembe jutott (mit tegyek, hajdan DOS-on megszoktam a spórolást), hogy az igazi az volna, ha nem tárolnám objektumonként az mezőneveket, hanem csak az osztály egy tömbjében, és valamilyen módon olyan attr_accessort tudnék definiálni, amely nem közvetlenül a nevének megfelelő mezőt adná vissza (ami tkp. nincs is), hanem meghívna azzal egy metódust, amely a kikeresné tömb sztringnek megfelelő indexét, és visszaadná a rekord annyiadik mezőjét.

...

Itt volt egy kis szünetem, és közben eszembe jutott, hogy egy aliasolt függvénnyel működhetne ez is, csak nem találok olyan eszközt, amellyel kinyerhetném a függvény hívási nevét. Amíg ezt meg nem találom (vagy meg nem mondod :), marad a már bevált módszer - sőt lehet, hogy utána is, inkább már csak kíváncsi vagyok.

Előzmény: KoporShow (17)
KoporShow Creative Commons License 2001.11.07 0 0 18
Az O'Reilly-n van egy uj bevezeto cikk a Rubyhoz:

http://linux.oreillynet.com/pub/a/linux/2001/10/25/ruby.html

KoporShow Creative Commons License 2001.11.07 0 0 17
Nocs eddig nem vettem eszre a kerdeset, most valaszolnek, ha meg nem keso.

A Ruby egyik legszebb tulajdonsaga, hogy az osztalyok, modulok (ezek lenyegeben a namespace-ek, bar kicsit tobbek annal...), tetszolegesen modosithatok futasidoben is, akar dinamikusan is.

Statikusan nagyon egyszeru, ha mar letezik az A osztalyod akarmikor irhatod:

class A
attr_accessor :uj_mezo
end

Az uj mezot hozzafuzi az osztalyodhoz.

A dinamikus sem sokkal nehezebb::
Tegyuk fel, hogy az osztalyod A, es hozza akarsz fuzni egy uj mezot, aminek a neve egy x nevu string altal adott, akkor ezt irod:

A.modul_eval("attr_accessor :#{x}")

Remelem segitett ez valamit.

KoporShow Creative Commons License 2001.11.04 0 0 16
A Ruby körülbelül ugyanazt a szerepet tölti be, mint mas szkriptnyelvek: a Perl a Python vagy a Tcl.

En egyreszt nap mint nap felmerülö feladatok gyors megoldasara hasznalom, amik neha az awk keretein tulmutatnak. (Regebben mindig szenvedtem, ha shell szkriptet kellett irnom, valamire, mert a nyelv mindeg maskepp müködik, mint ahogy az logikus lenne, es ezer kivetel es szabaly van. A Rubyban 1 nap tanulas utan 10-szer olyan folyekonyan irtam a kodot mint korabban shellben.

Masreszt, mivel chiptervezessel foglalkozom, es peldaul irtam (irok) egy C-kiterjesztest a Rubyhoz, azaz ezentul majd Ruby parancsokkal lehet megoldani olyan feladatokat amikenel a sebesseg nem jatszik döntö szerepet. Eddig erre Tcl-t hasynaltunk (persze ez most sem tünt el), de most hozzaön a Ruby, ami magasan jobb ennel.

Előzmény: ez_már_nekem_is_sok (12)
lx Creative Commons License 2001.11.04 0 0 15
Az iskoláját! Időnként még mindig megszívom a kisebb-nagyobb jelekkel.

Szóval helyesen:
"szúrniegy nem osztályba mezőt" = szúrni egy osztályba új mezőt,

- és máris úgy tudok hivatkozni az adatokra, hogy {objektum}.{mezőnév}

Előzmény: lx (13)
lx Creative Commons License 2001.11.04 0 0 14
Az a vicc, hogy az OOP lényegét akár a ruby doksiból is ki lehet hámozni, de azt inkább mégse ajánlanám. Viszont - remélem jól emlékszem a nevére - Kris Jamsa összehozott egy könyvet a Javáról: mivel a Java aztán egy végletekig OOP valami, kénytelen volt a fickó az OOP-t alaposan kivesézni a nyelvhez. Kettőt egy csapásra. Beszerzési lehetősége: utoljára könyvesboltban láttam, de sose lehessen tudni. :) Ára: biztosan sok (én is csak a barátnőmét lapozgattam ;).
Előzmény: tomb (11)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!