Forum huvudsida -> Programmering -> Funktioner - Varför?!
Sidor: 1
zippo88 | 01:05 - 21:a Mars 2009 | Post #1 | |
Medlem Inlägg: 13 Skicka PM |
Hej jag har lite(mycket) problem med varför funktioner används, det enda jag vet är varför man gör void funktioner utan några parametrar. För att kunna återanvända delar av koden flera gånger. Men sen kommer det här med värden till parametrar o grejer. Varför har man dom, vilken funktion fyller det i till exempel ett spel. Jag tycker att det verkar helt meningslöst, förstår inte varför man inte bara beräknar sakerna i funktionen. Kan någon förklara varför man använder detta? Alla guider jag har läst förklarar bara hur man använder det. aldrig varför. ,,r helt förvirrad . En bra nybörjarvänlig förklaring uppskattas |
HärJ | 03:02 - 21:a Mars 2009 | Post #2 | |
Moderator Inlägg: 1198 Skicka PM |
Du svarar egentligen på din egen fråga. Man vill slippa skriva samma sak många gånger. Alternativet är att du vill göra din kod mer läslig. I ett spel finns det uppenbara funktioner som tex flytta spelpjäser, kolla om någon vunnit osv. För att funktionen ska kunna genomföra dessa beräkningar krävs att den får rätt indata, parametrar. Ex:
Som du ser så använder jag funktioner, för att strukturera upp programmet och göra det mer läsligt. Varje funktion har en specifik uppgift. Vissa, tex slump-mellan, tar prametrar för att kunna utföra en beräkning och retunera ett lämpligt värde. Hoppas att jag förstod din fråga rätt och inte bara fransat ut i kanten ------------------------- Tänk om jag vore en skalärprodukt! |
zippo88 | 23:58 - 21:a Mars 2009 | Post #3 | |
Medlem Inlägg: 13 Skicka PM |
jag förstod faktiskt ingenting av din kod, och jag fattar fortfarande inte parametrar i funktioner och varför man returnerar värden till funktioner och vad dom värdena gör eller hur man får det o fungera i olika sammanhang. Kan visa lite kod när jag har försökt få nåt o funka med parametrar som jag mycket enklare kunde ha skrivit utan dom, och funkade det gjorde det inte såklart. Kan inte ens starta programmet :/.
någon som har tid och lust att rätta till vad jag har gjort fel? Samt en förklaring på varför man lägger in variablerna i funktionens parametrar istället för att låta dem vara tomma och lägga till variablerna längst upp i programmet skulle vara bra. När ska man använda parametrar till funktionen och hur och varifrån kommer jag åt dom? Som ni ser så fattar jag verkligen inte parametrarna i funktioner alls. är väl dum helt enkelt, men tack för att du tog dej tid att försöka Härj. här är ett till test där jag har gjort på ett lite annorlunda sätt för att försöka få det o fungera.
fungerade inte heller. expected primary expression before bool och int i main funktionen. Det här är antagligen inte ens ett bra sätt att använda funktionsparametrar på och jag har inget return värde. Jag skulle uppskatta om någon tog sej tid att försöka förklara när man ska använda funktionsparametrar (och return värden). Har försökt en hel del i böcker och söka på google men det blir bara mer o mer oklart :/. Har kört fast här. srsly, lär dig använda source-taggar //herj Senast redigerad 21:35 - 22:a Mars 2009 |
zippo88 | 02:13 - 22:a Mars 2009 | Post #4 | |
Medlem Inlägg: 13 Skicka PM |
Jag börjar äntligen fatta det här med funktioner nu. Det används när man vill ta med sej en variabel från en funktion till en annan funktion och ändra den på något sätt och sedan skicka tillbaks den ändrade variablen. till exempel så här:
men en fråga bara. Funkar det lika bra om man gör på detta sättet?:
Nu har jag deklarerat variablerna utanför alla funktioner, precis i början. ,,r det ok att göra så eller fungerar inte det om man vill göra en mer avancerad funktion? no srsly! lär dig använda source-taggar //herj Senast redigerad 21:39 - 22:a Mars 2009 |
Vitdom | 10:15 - 22:a Mars 2009 | Post #5 | |
Medlem Inlägg: 71 Skicka PM |
Det fungerar utmärkt. Men din beskrivning av en funktion är lite fel, en lite bättre vore: "En kod som hoppas till när den anropas i koden. Faktiska argument kopieras till nya variabler som kallas formella argument, sedan utförs en kod, efter körningen returnerar funktionen en variabel av funktionens returtyp(void=inget). Eftersom att programmering är i grunden sekventiellt vill man ha kod som kan återanvändas, måste man hoppa till en kod som sedan exekveras, sedan hoppar man tillbaka till den plats i koden där man anropade funktionen. Funktioner används mycket med kod som ska kunna återanvändas." -------------------------
Senast redigerad 10:22 - 22:a Mars 2009 |
zippo88 | 16:24 - 22:a Mars 2009 | Post #6 | |
Medlem Inlägg: 13 Skicka PM |
aa jag vet att man använder funktioner för att återanvända kod. det är bara det att jag blir lite förvirrad när man tar med sej variabler från andra delar i koden och ändrar om dom. När är det en bra ide att använda dom etc? Igår försökte jag göra samma textspel som jag har gjort innan fast mer organiserat med mindre kod. det gick inte så bra. Det svåra är väl att jag inte vet från början hur jag ska ha det. Testade strukturer för mina monster och så, och jag kan ju få koden att funka men isåfall tror jag att jag lägger till många onödiga nya variabler utanför main och sånt. Syftet var ju att testa att använda variablerna i parametrar men jag blir bara förvirrad. Har ni några tips på en bra regel att följa när man ska koda ett spel. Hur man ska strukturera upp det hela och när man använder variabler i parametrarna på funktioner. Jag antar att det är när man vill ändra en variabel på ett ställe men inte i till exempel en annan del där du hämtar nya "monster". Det jag har läst hittills visar delvis hur man gör när man gör funktions parametrar, men aldrig några bra exempel hur man ska använda dom i ett litet spel eller så. Det skulle va kul att se något litet exempel. tror det blir lättare att förstå då Senast redigerad 16:28 - 22:a Mars 2009 |
HärJ | 21:43 - 22:a Mars 2009 | Post #7 | |
Moderator Inlägg: 1198 Skicka PM |
Vitdom: din beskrivning låter som hämtad ur en lärobok varför kan ingen scheme? borde jag valt lisp istället? ------------------------- Tänk om jag vore en skalärprodukt! |
agge89 | 02:58 - 23:e Mars 2009 | Post #8 | |
Medlem Inlägg: 13 Skicka PM |
Jag är rädd för att du i princip bara förstår hälften av poängen med funktioner. Men var inte orolig, funktioner är svårt för nästan alla i början. Låt mig förklara: Låt säga att du gör ett spel med en massa monster o så. Någonstans i din kod så vill du flytta ett specifikt monster. Det är då du kan anropa din funktion moveMonster(int typ, int vilken); Så flyttas monstret. Om du vill flytta monstret 5, av typen 2 (som exempel) så skriver du: moveMonster(2, 5); så flyttas monstret, om du har skrivit koden i funktionen rätt. Det fina med funktionen är nu att du inte behöver tänka på vad som händer när mostret flyttas, den flyttas i och med att funktionen anropas. Så du kan koncentrera dig på 1 sak i taget. Först att koda funktionen, och sen huvudprogrammet, där funktionen anropas. Det blir alltså MYCKET mera läsförståeligt! Om du inte hade några argument till funktionen och bara skapade en funktion moveMonster(); Så vilket monster skulle då ha flyttats när du anropade funktionen? Det kan du inte bestämma utan parametrarna. Du måste alltså skicka in informationen som funktionen ska behandla. Nu tänker du kanske på globala variabler... Men glöm dem genast!! De bryter mot reglerna för objektorienterad programmering och är inte alls bra att använda (om de inte är konstanter, eller några andra ovanliga fall). När jag ser ditt program som ska beräkna addition så ser jag att du inte förstått en annan grej också. I den övre av koderna så anropar du funktionen på både rad 19 och 20. Det är så att när du anropar en funktion så hoppar programmet upp till funktionen och gör allt där, och sen returnerar något. Sen hoppar den tillbaka. Du kan alltså ta bort rad 19. ------------------------- Augustismen |
zippo88 | 05:45 - 23:e Mars 2009 | Post #9 | |
Medlem Inlägg: 13 Skicka PM |
ok tack för hjälpen. Btw agge jag kallade på funktionen där med meningen ^^, den skulle ju användas och göra beräkningen där tänkte jag. Jag har iallafall lyckats använda en struktur funktion nu. Visst jag skulle kunna gjort det med en funktion utan parametrar också genom att ändra värdet på monstrena efter koden har körts och jag har rätt mycket onödigheter för o göra detta simpla spelet, men syftet var att testa funktioner. Jag har gjort en struktur med monster som jag ändrar inom 1 funktion (mvalf), och använder i den andra(dmg) utan att returnera ett värde. detta gör jag eftersom jag inte vill ändra på själva strukturens värden, så jag kan kalla på olika monster och alltid få start värdena. Använder jag en tom funktion och skriver monster strukturen utanför main så kommer värdena ändras för själva strukturen och när jag hämtar ett nytt monster så kommer det ha fel värden. På sättet jag gör nu så går värdena tillbaks så fort jag går ur funktionen. Detta skulle jag såklart också kunna skriva utan parametrarna men det verkar ju vara en viktig del av nån anledning så jag vill iallafall kunna använda dem vid olika tillfällen ifall man nån gång skulle behöva dem. Här har ni min test av funktioner i ett litet test spel ifall nån är intresserad av att kolla på den och hacka lite på mina fel. Varning: Mycket kod.
btw herj kolla jag använde source tag Senast redigerad 05:47 - 23:e Mars 2009 |
agge89 | 13:08 - 23:e Mars 2009 | Post #10 | |
Medlem Inlägg: 13 Skicka PM |
haha, du ska inte känna att du är tvingad att använda parametrar. Anledningen till att du inte behöver använda parametrarna i ditt program är för att alla dina variabler är globala. De är alltså utanför main och någon annan funktion. Gör dem lokala, så ska du se att du behöver dina parametrar. Ett tips till din kod är också att använda structen på ett smartare sätt. Skapa inte 5 st sånna från början, utan skapa en sån, som får sina värden när spelaren har tryckt in vem ha vill möta. ------------------------- Augustismen |
agge89 | 14:02 - 23:e Mars 2009 | Post #11 | |
Medlem Inlägg: 13 Skicka PM |
Jag tog mig friheten att skriva om din kod lite. Kolla noga igenom den, och fråga mig om precis vad som helst. Jag hoppas att du ser att min kod är betydligt enklare och lättförståeligare:P
Edit: Fattar inte hur man får texten grå. Sen lägg märke till att jag inte använder några globala variabler, samt en extra funktion. Den extra funktionen gör det mycket enklare att läsa koden. Fixa source-taggar //herj ------------------------- Augustismen Senast redigerad 17:58 - 23:e Mars 2009 |
zippo88 | 16:44 - 23:e Mars 2009 | Post #12 | |
Medlem Inlägg: 13 Skicka PM |
mm det ser mycket bättre ut, och en mycket smartare lösning att använda strukturen på. I min kod behövde jag skriva samma if sats 2 gånger i de 2 olika funktionerna vilket gjorde den ena funktionen rätt meningslös. En fråga bara. Kör den funktionen när du skriver enemy=initMonster(enemy, mval);? för jag ser ingen annanstans som initMonster skulle kunna köras. Och en fråga till, Vad är det för mening att använda icke globala variabler? Körs koden snabbare eller är det bara så att det behövs i vissa program och att det är bäst att försöka lära sej skriva på det sättet? Tack för att du tar dej tid att hjälpa mej, jag fattar funktioner mycket bättre nu. |
agge89 | 18:15 - 23:e Mars 2009 | Post #13 | |
Medlem Inlägg: 13 Skicka PM |
Ja den körs! Det var därför jag sa att du kunde ta bort rad 19 ur din källkod åvan. Den körs direkt, så fort jag kallar på den. enemy=initMonster(enemy, mval); betyder alltså att först så körs funktionen initMonster(enemy, mval); Sen så får enemy det returnerade värdet. Ja som du ser så måste jag använda parametrar om jag inte använder globala variabler. Men skulle alla mina variabler ha varit globala, så skulle inte jag ha behövt använda parametrar. Så frågan på denna tråd är med andra ord varför man INTE ska använda globala variabler. Detta kan du lätt hitta på google. För det är väldigt många som har denna fråga. Jag kan sammanfatta till det här. Om du använder globala variabler, så kommer det att ta mer minne från datorn, eftersom de hela tiden finns i RAM. Lokala variabler finns bara temporärt. Det blir dessutom lättare o förstå koden med mindre variabler åt gången att tänka på. Inom programmering så använder man Murphys lag. Om något kan gå fel, så kommer det troligen att gå fel. Du ger dig möjligheten att ända på dina variabler vart som helst och hur som helst. Detta kan leda till att hela din kod blir som spaghetti. Du kommer till slut inte hitta vart du har gjort fel, eftersom det kan ha skett vart som helst där du ändrar på den variabel som är fel, vilket kan vara vart som helst i ditt program. Om du inte förstår vad jag menar, så nöj dig med att det bryter mot reglerna för objektorienterad programmering. Alltså den form av programmering du håller på med nu. Och det är inte bra;) ------------------------- Augustismen |
zippo88 | 19:06 - 23:e Mars 2009 | Post #14 | |
Medlem Inlägg: 13 Skicka PM |
Tack så mycket. Jag ska försöka göra några program med parametrar. Jag fattar rätt bra hur dom funkar nu men det är ändå lite svårt så här i början att använda dom på rätt sätt Vet inte om jag e lite trög men vad är det för mening med din "while(true) {" i initMonster? Senast redigerad 19:10 - 23:e Mars 2009 |
zippo88 | 22:57 - 23:e Mars 2009 | Post #15 | |
Medlem Inlägg: 13 Skicka PM |
sådär ja. Då har man gjort ett nytt testspel från grunden. Ja det är inte mycket att hänga i julgranen för det är bara en början till ett litet spel, har byggt upp grunden nu iallfall, och gjorde det med hjälp av parametrar nu istället. Tog mej nån timme att komma upp med detta men nu tycker jag att jag har tänkt igenom det ordentligt och fått fram nåt mer lättläsligt och bättre programmerat. Har inte kollat på min egen kod som du ändrade eller nåt utan skrev detta från grunden eftersom jag fattar funktioner mycket bättre nu tack vare dej. jaja här är den och om du ser nåt konstigt säg bara till.
|
agge89 | 01:20 - 24:e Mars 2009 | Post #16 | |
Medlem Inlägg: 13 Skicka PM |
Att jag använder while(true) är för att jag ska komma upp längst upp till funktionen med continue; Men det hade varit smartare att kalla på funktionen igen, som du gör. Tänkte bara inte på att man kunde göra det. Det nya spel btw är enligt mig perfekt:) Kan inte hitta något som borde förbättras. Möjligen om du använde klasser till monstrerna istället för structs. Men det är nog bara en smaksak;) ------------------------- Augustismen |
zippo88 | 03:48 - 25:e Mars 2009 | Post #17 | |
Medlem Inlägg: 13 Skicka PM |
skickade ett PM till dej |
Sidor: 1
Forum huvudsida -> Programmering -> Funktioner - Varför?!
Du får inte posta i den här tråden | Till toppen
Datum
2024-12-22 15:41
Vecka: 51
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.