Överblickbar funktion?

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Överblickbar funktion?

Inläggav Redreamer » 2 februari 2018, 21:20

Hur lång funktion tycker ni att man kan skriva innan den blir oöverskådlig och måste brytas ned? Mina verkar snitta 50 -150 rader och då är det en del tomma rader för att förtydliga "stycken" osv. Egentligen har jag inte haft någon gräns, de har mest blivit som de blivit men långa blir ofta svårare att begripa och debugga, speciellt om man har långa hopp. Någon som har tips på en guide för att koda med "stil"?
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1431
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: Överblickbar funktion?

Inläggav bjonte » 3 februari 2018, 08:29

Jag skummade lite i min källkod och jag skulle grovt gissa att mitt medel ligger på 50 rader. Jag blev sugen på att skriva ett skript som visar statistik nu.

En bok som brukar hänvisas till för att hjälpa till att skriva bra kod är Clean Code av Robert C. Martin. Den har exempel i högnivåspråk men det mesta går att applicera på assembler med.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2021
Blev medlem: 17 april 2006, 23:12

Re: Överblickbar funktion?

Inläggav Redreamer » 3 februari 2018, 09:54

En annan sak som jag slarvat med, men egentligen haft i tankarna redan från början är ett "funktionshuvud". Jag har använt mig av det nu när jag skriver mina AI funktioner. Mycket för att ha koll på vilka funktioner som är beroende av tidigare.
exempel.
;*******************************************************************************
;ai_go_to_long_direction
; Prefunctions: "ai_long_way_to_go""
; Input: "var_ai_lwtg_up_down_left_right_length"
; Output: "ai_player_direction"
;
; FUNCTION DESCRIPTION
; Follow the longest path
;*******************************************************************************
För mig så har detta faktiskt varit kanske användbart. Man glömmer annars snabbt vila in och ut variabler som en bit var beroende av. Och i mitt AI experimenterande så har jag kastat om ordningen på funktionerna för att få önskat resultat.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1431
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: Överblickbar funktion?

Inläggav bjonte » 3 februari 2018, 11:44

Redreamer skrev:En annan sak som jag slarvat med, men egentligen haft i tankarna redan från början är ett "funktionshuvud".

Det där är riktigt användbart. Jag kör med en liknande, men mer slimmad variant:

Kod: Markera allt
// Multiplies register using unsigned self modifying inline code tailored for the multiplicand.
// -> A: Value to multiply
// <- A: Result
// <> X: Preserved
// <> Y: Preserved
macro inline_mul8(.multiplicand)
{
    ...
}

Jag tycker att det är väldigt hjälpsamt att tala om vilka register som inte förstörs så att funktionen kan användas i loopar utan att jag behöver leta i koden efter oanvända register eller spara undan i onödan.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2021
Blev medlem: 17 april 2006, 23:12

Re: Överblickbar funktion?

Inläggav bjonte » 3 februari 2018, 12:06

Nu har jag gjort diagram över antalet funktioner som har en viss radlängd i Bruce Lee II och mitt core-bibliotek av kod som återanvänds mellan projekt (även Bruce Lee II). Det går att se att det finns såväl monsterfunktioner på 300 rader och sådana på 3 rader men det verkar vara populärt med mellan 5 och 10 rader, vilket förvånar mig med tanke på att inte mycket kan göras på fem rader. Över 50 rader hör inte till vanligheten.
Bilagor
funktionslängd.png
Diagram över funktioners längd
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2021
Blev medlem: 17 april 2006, 23:12


Återgå till Programmering/prog.-verktyg

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst

Banners

BOA Japon Mediapalatset Nostalgibutiken
Quartex Retro Overlays Retroplay Spel och sånt
Super Motaro Söders Serie & Skivhandel vintagegames.se RG 2016
cron