Avatar billede jakwag Nybegynder
24. november 2003 - 16:41 Der er 6 kommentarer og
1 løsning

Arrays og objects i Lingo mx (og gode råd)

Hej

I de fleste programmeringssprog har man noget der hedder arrays. f.eks. "jakob","jesper","hanne"

Har man ikke det i director? Hvad med arrays of objects?

Hvad i det hele taget med objects? Kan man ikke lave et custom object i lingo?

Jeg programmere AS, men kommer til at skulle bruge director lidt igen nu, så det ville være rart at få lidt af alt det her på plads.

Jeg vil blive lykkelig over ALLE kommentare og gode råd om OOP i lingo.

: ) Jakob
Avatar billede kanding Nybegynder
24. november 2003 - 21:58 #1
OK, Arrays først.Arrays i director kaldes Lists, men er det samme som arrays. En vigtig undtagelse er, at første index position starter med 1 og ikke 0 som i mange andre sprog.

Der findes 2 former for lister. Linear og property(hash table)
Linear list:

myLinearList = ["jakob","jesper","hanne"]
put myLinearList[1] returnerer "jakob"
put myLinearList.getPos("hanne") returnerer 3
put myLinearList.findPos("hanne") returnerer 3
put myLinearList.findPos("john") returnerer 0
myLinearList.delteAt(2) sletter index 2 fra listen

Property list:
myPropertyList = [#navn:"jakob", #point:50]

put myPropertyList.navn returnerer "jakob"

put myPropertyList.point returnerer  50

put myPropertyList.getOne("jakob") returnerer #navn

put myPropertyList.getPropAt(1) returnerer  #navn

put myPropertyList.findpos(#navn) returnerer  1

myPropertyList.addProp(#farve, "blå") tilføjer en ny property og value
put myPropertyList viser den nye liste:  [#navn: "jakob", #point: 50, #farve: "blå"]

myPropertyList.sort() sorterer listen alfabetisk efter property
put myPropertyList : [#farve: "blå", #navn: "jakob", #point: 50]

Du kan både slette med deleteAt og med

myPropertyList.DeleteProp(#farve)

Prøv at lege med det i message vinduet.

Med hensyn til Objekter. Lav et nyt script, kaldet f.eks. "mitObjekt" sæt typen til Parent script. (Klik på det lille script ikon og åben property inspector'en)

Her laver du en lille handler(funktion) der initialisere objektet

on new me
return me
end

me er objectets reference til sig selv (eller nærmere en adresse i RAM)

men det er jo stadig kun en template til objekter. For at lave et object, så åben message vinduet og skriv

jakob = new (script "mitObjekt")

put jakob vil bare vise en adresse i RAM, så scriptet skal selvfølgelig have sine egne personlige variabler(properties) og sine egne funktioner(handlers). Prøv at udvidde scriptet sådan her

---- SCRIPT -----

property pAlder

on new me, alder
pAlder = alder
return me
end

on hvor_gammel_er_du me
return pAlder
end

Prøv så i messagevinduet :

jakob = new(script "m", 45)

put jakob.hvor_gammel_er_du() returnerer så 45.

Leg lidt med det, og vend tilbage hertil med evt. spørgsmål
Avatar billede jakwag Nybegynder
25. november 2003 - 16:50 #2
TAK! det ser ud til at være præcis hvad jeg havde brug for. Jeg vender sikkert tilbage med lidt mere på et andet tidspunkt. Tak fordi du gad at skrive så meget

: ) Jakob
Avatar billede jakwag Nybegynder
25. november 2003 - 17:24 #3
Hvis jeg gerne vil erstatte en værdien af point i:

propL = [#navn:"jakob", #point:50]

til 100, kan jeg gøre det anderledes end:

propL.deleteAt(propL.findpos(#point))
propL.addProp(#point,100)

??
Avatar billede jakwag Nybegynder
25. november 2003 - 17:27 #4
glem det : )

Det var som jeg troede, jeg ved ikke hvorfor det ikke lige virkede....
Avatar billede jakwag Nybegynder
25. november 2003 - 17:56 #5
Hvis nu at jeg laver en parent:

property pAlder

on new me, alder
pAlder = alder
return me
end

og bagefter et child:

myChild = new (script "obj",26)

kan jeg så derefter putte en ekstra property direkte på min child:

myChild.nyProp = "hejsa"  -- virker ikke
Avatar billede kanding Nybegynder
25. november 2003 - 23:42 #6
Det kan du ikke da property'en her tilhører et objekt og ikke en liste. Men evt. lav dine property's som en liste istedet

on new me, prop, val
pProperties = [:]
me.addProperty(prop, val)
return me
end

on addProperty me, prop, val
pProperties.addProp(prop, val)
end

så kan du fremover kalde med

myChild.addProperty(#nyProp , "hejsa")

BTW, check også ancestors for inheritance m.m.
Avatar billede jakwag Nybegynder
27. november 2003 - 11:02 #7
Jeg takker for nu, du har været en stor hjælp.

: ) Jakob
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester