Forum huvudsida -> Programmering -> Meningen med funktioner...
Sidor: 1
Gaburieru | 00:43 - 10:e Maj 2008 | Post #1 | |
Medlem Inlägg: 7 ![]() Skicka PM |
Hej, jag har lixom aldrig fattat vad det är för mening att använda funktioner, det gör det ju bara mer komplicerat... (Syftar på koderna i guiden, dom sakerna som händer i koderna med funktioner, kan man göra utan funktioner också) Jag vet att jag förklarar dåligt... =( |
HärJ | 01:33 - 10:e Maj 2008 | Post #2 | |
Moderator Inlägg: 1198 ![]() Skicka PM |
Funktioner är bra eftersom du kan utföra en viss typ av operationer med ett anrop. Då slipper du långa kod-stycken som blir svår lästa och kan leda till fel. Jag illustrerar.
som du märker blir det vad vi i svenskan kallar "störande upprepning". Istället skulle jag ha skrivit:
som du ser blir det lättare att läsa och misstag blir kanske färre. Har inte testkört koden så den kan innehålla buggar. Hoppas det gav en liten vink av vad man kan ha funktioner till ![]() EDIT: tobbez: om du ska klaga kan du börja skriva lisp ![]() ------------------------- Tänk om jag vore en skalärprodukt! Senast redigerad 02:01 - 10:e Maj 2008 |
kode | 01:37 - 10:e Maj 2008 | Post #3 | |
Medlem Inlägg: 45 ![]() Skicka PM |
Funktioner/metoder har flera nyttor. En av de mest uppenbara är nog det att det underlättar enormt att kunna återanvända samma kod flera gånger. För att ta ett dåligt exempel: Säg att du ska räkna ut medelvärdet av två tal. Detta görs genom att addera de två talen och dividera med 2 (antalet tal). Säg att du skriver det i din main-funktion precis där du använder det. Längre fram i körningen behöver du ett medelvärde av två tal igen, och skriver in (kopierar/klistrar in) samma kod igen. Säg att det här (och liknande situationer) inträffar några gånger till. Du upptäcker en bugg i din kod. I det här exemplet kan vi kanske ta att du får svaret 0 istället för 0.5 när du ville ha medelvärdet av talen 1 och 0. Du upptäcker att det var för att du råkat utföra heltalsdivision istället för flyttalsdivision på samtliga ställen i koden. Hade du anropat en funktion för att räkna ut medelvärden i detta fall hade det varit ett ställe att ändra på, nu kanske det är 10. Risken är ju att du dessutom missade ett eller två ställen och buggen kvarstår utan att du kanske direkt upptäcker det. Som sagt, ett ganska dåligt exempel. Och givetvis kan man göra samma sak utan funktioner, men det är generellt sett inte att rekommendera (dålig programmeringsstil, et.c.). |
ozamosi | 01:56 - 10:e Maj 2008 | Post #4 | |
Administratör Inlägg: 1129 ![]() Skicka PM |
I guiden används cout, vilket inte är en vanlig funktion, men det är egentligen bara objektorienterings-fluff runt vad som väsentligen är en funktion. En gång i tiden lärde jag mig 286-assembler. Guiden jag läste gick igenom inmatning och utmatning innan den gick igenom funktioner. Den berättade också att DOS inbyggda inmatning- och utmatning-bibliotek var makalöst sega, jämfört med att helt enkelt ansluta till rätt port i datorn och läsa eller skriva. Alltså: praktiskt taget inga onödiga funktionsanrop (avsluta program, t ex, var såklart funktionsanrop ändå). Jag satt en hel helg för att lyckas åstakomma ungefär vad herj skriver ovan (dock bara med två frågor - det var Många rader att kopiera per utmatning). Källkoden blev till slut, om jag inte minns fel, över 6 kB - dvs, den innehöll mer än 6 000 tecken. Herj gjorde just dubbelt så mycket (fyra frågor) på under 400 tecken. Därför har man funktioner. Nu var det assembly, inte C - en if-sats tar minst 4 rader med runt 10 tecken/rad, men lisp är inte precis sparsamt med tecknena heller. Varje gång du kopierar kod från en plats till en annan gör du Fel - för det innebär att om det finns ett fel i koden måste du ändra koden på två platser - eller fyra platser i herjs exempel ovan. Och det gör dessutom att du måste kopiera det nästa gång också. Det blir mycket lättare att läsa vad koden gör om man klipper ut allt äckligt klägg, packar in den i ett hörn någonstans, och ersätter den med ett pedagogiskt valt namn, så vet du att något lite lagom mystiskt som du inte behöver bry dig om kommer att göra precis vad funktionsnamnet säger - och gör det inte det behöver du som sagt bara fixa det i funktionen en gång. ------------------------- Ljusblå Senast redigerad 01:58 - 10:e Maj 2008 |
tobbez | 01:56 - 10:e Maj 2008 | Post #5 | |
Medlem Inlägg: 364 ![]() Skicka PM |
EDIT: tobbez: om du ska klaga kan du börja skriva lisp Ok, här är en finare version av din kod ![]()
Edit: Egentligen var det fult att bara skriva en wrapper runt herjs funktion och lägga till lite funktionalitet, så här borde det varit:
Senast redigerad 02:02 - 10:e Maj 2008 |
HärJ | 02:11 - 10:e Maj 2008 | Post #6 | |
Moderator Inlägg: 1198 ![]() Skicka PM |
kan hålla med om att tobbez sista kod är snyggare... men det var ju länge sen jag skrev skrev nåt alls och att då tävla med en Innovativ programmerare... ja vet inte ![]() men jag lyfter på hatten för tobbez ------------------------- Tänk om jag vore en skalärprodukt! |
tobbez | 02:13 - 10:e Maj 2008 | Post #7 | |
Medlem Inlägg: 364 ![]() Skicka PM |
Citat av HärJ:men jag lyfter på hatten för tobbez Man tackar ^^ |
tobbez | 02:46 - 10:e Maj 2008 | Post #8 | |
Medlem Inlägg: 364 ![]() Skicka PM |
Så här kan man också skriva om man vill, även om det inte ger jättemycket. Frågefunktionen är dock trevligare att använda om man skulle generera frågorna i programmet på något sätt (som en lista).
|
HärJ | 02:51 - 10:e Maj 2008 | Post #9 | |
Moderator Inlägg: 1198 ![]() Skicka PM |
listor är ju alltid trevliga![]() Det här blir ju bara bättre och bättre. ------------------------- Tänk om jag vore en skalärprodukt! |
tobbez | 02:56 - 10:e Maj 2008 | Post #10 | |
Medlem Inlägg: 364 ![]() Skicka PM |
Fast nu blir det nog inte så mycket bättre, tror jag. |
HärJ | 03:27 - 10:e Maj 2008 | Post #11 | |
Moderator Inlägg: 1198 ![]() Skicka PM |
Det beror ju på, ska man ha många ja och nej frågor efter varandra är den underbar. Annars är den lite klumpig kanske... Då skulle man kunna ha båda funktionerna för att använda vid olika tillfällen ![]() ------------------------- Tänk om jag vore en skalärprodukt! |
Gaburieru | 20:05 - 10:e Maj 2008 | Post #12 | |
Medlem Inlägg: 7 ![]() Skicka PM |
Jag tror att jag fattar nu, tack killar!![]() |
HärJ | 21:36 - 10:e Maj 2008 | Post #13 | |
Moderator Inlägg: 1198 ![]() Skicka PM |
Citat av Gaburieru:Jag tror att jag fattar nu, tack killar! tack själv! Var riktigt kul att komma igång igen ![]() ------------------------- Tänk om jag vore en skalärprodukt! |
Hetzz | 19:09 - 11:a Maj 2008 | Post #14 | |
Medlem Inlägg: 516 ![]() Skicka PM |
En liknelse som jag kom att tänka på var att jämföra med en fabrik: En fabrik är ett program, du matar in något och du får ut något. Beroende på vad fabriken(programmet) gör så finns det olika slag av maskiner(funktioner) som endast har en del av uppgiften. Detta medför skalbarhet(köpa fler maskiner) och även effektivare felsökning/optimering (jämf. att finna fel på en maskin och tillämpa lösningen på alla liknande) edit: det blev lite rörigt, bild är påväg... ![]() Bilden ska illustrera en fabrik som tillverkar lådor. ,,garen hade kunnat lösa detta på olika sätt. Metod 1: Att bygga fabriken så att den klarar att tillverka de lådor som planerats. Metod 2: Att placera maskiner i fabriken som klarar att göra det arbete som efterfrågas. Metod 2 ger oss fördelen att om man tex vill expandera fabriken i ett senare tillfälle så behöver man endast fixa fler maskiner som gör just det man vill. Man kan även lättare ändra designen utan att behöva designa om hela tillverkningskedjan. hmm, jag hade allt mycket bättre planerat... får skylla på irl-arbete och annat som kommit i vägen. -------------------------
Senast redigerad 19:21 - 11:a Maj 2008 |
ozamosi | 19:15 - 11:a Maj 2008 | Post #15 | |
Administratör Inlägg: 1129 ![]() Skicka PM |
*vänta nyfiket på att få in klasser i det hela* ------------------------- Ljusblå |
HärJ | 19:29 - 11:a Maj 2008 | Post #16 | |
Moderator Inlägg: 1198 ![]() Skicka PM |
Citat av ozamosi:*vänta nyfiket på att få in klasser i det hela* KlassKamp! ![]() ------------------------- Tänk om jag vore en skalärprodukt! |
FunkyChicken | 20:00 - 11:a Maj 2008 | Post #17 | |
Nyhetsredaktör Inlägg: 800 ![]() Skicka PM |
Hetzz: Helt glasklart blev det inte riktigt... men bilden var tjusig =) |
achnorr | 22:36 - 11:a Maj 2008 | Post #18 | |
Medlem Inlägg: 82 ![]() Skicka PM |
mitt bidrag \o/ (lyckades pressa in en klass) ![]()
------------------------- Ohhoo* |
Hetzz | 13:12 - 12:a Maj 2008 | Post #19 | |
Medlem Inlägg: 516 ![]() Skicka PM |
Citat av FunkyChicken:Hetzz: Helt glasklart blev det inte riktigt... men bilden var tjusig =) Tanken var att det i slutskredet skulle finnas flera olika maskiner, att dessa skulle användas i ett vettigt exempel där klasser symboliserades av maskiner och lite dylikt. Det lät nice i huvudet och såg bra ut... -------------------------
|
ozamosi | 15:20 - 12:a Maj 2008 | Post #20 | |
Administratör Inlägg: 1129 ![]() Skicka PM |
Nästa spännande inslag att få med: factories. ------------------------- Ljusblå |
Sidor: 1
Forum huvudsida -> Programmering -> Meningen med funktioner...
Du får inte posta i den här tråden | Till toppen
Datum
2025-03-17 08:21
Vecka: 12
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.