mbjarland/wizards-game — pull request #1 by mrange (2014-03-30 21:43:04+00:00)
Title: F# implementation

Skapade ett Game1 men feature-creepade för mkt. Skapade därför Game2 med din groovy implementation som inspiration.

En del funderingar:
1. F# har ingen eval (iaf lätt tillgänglig) för F# separerar compile-time vs run-time. Game repl blir därför något mer komplicerad. Å andra sidan bör nog ett "riktigt" spel kanske inte förlita sig på eval? Man vill ju ha koll på felmeddelanden samt hindra användare från att mata in godtyckliga expressions som exekveras av F#/Groovy/Lisp
2. Jag är ingen expert på LISP men jag misstänker jag rätt snabbt gått vilse med alla car, cadr, cddr etc i ett större program. I F# kan man också syssla med first, second etc för tuples men man brukar låta bli det eftersom det ofta blir maintenance hell på det
3. Å andra sidan är jag ingen groovy expert heller men tycker groovy är trivialt att läsa. LISP koden tycker jag är betydligt mer svårgenomtränglig.
4. Ruby är ju lite samma. Även om man inte kan det är det närmast trivialt att förstå.
5. F# promotar ju immutability, så vill man ha mutability så får man oftast jobba sig lite.
6. F# list comprehension är inte så dumt, om du är intresserad titta på inventory metoden

Man kan fundera på statiskt vs. dynamiskt typat. Många krig på internet runt det här. Men min personliga reflektion runt det är:
1. Dynamiskt typad språk kan nog vara snäppet lättare att läsa
2. Men att läsa kod är inte det ändå man gör som maintainer. Ofta söker man beroenden mellan funktioner och moduler. Statiskt typade programspråk gör att man kan utveckla verktyg som gör att man kan "fråga" koden var en funktion/modul används eller ej. För att uppnå samma i dynamiska språk krävs strikt namngivning som antagligen reducerar läsbarheten (men ökar sökbarheten).