Permalänk
Datavetare

@perost: du har helt rätt om Ruby. Håller på att lära mig det nu, har faktiskt aldrig sett någon använda "for" så här långt och läste något om hur Rubyists gör det som man i andra språk använder "for" till. Det ihop med att ändå "while" och "until" finns fick mig att felaktigt anta att "for" saknades.

Brukar läsa språkdefinitionen när jag lär mig ett nytt språk, detta är ett väldigt bra exempel på varför det är en bra idé (har inte hunnit läsa den för Ruby än).

Edit: och efter att testat "for" i Ruby förstår jag varför nästan ingen använder dem. Allt är uttryck i Ruby, så även "if" och "for". Men vad vad känns det rimligt att x blir här?

x = for i in 1..10 do puts(i) end

(Det blir en Range.new(1,10), d.v.s. den serie siffror man kör "for" loopen för)

vad x blir här är uppenbart

x = if a < b then b else a end

Edit2: hittade vad nog är huvudorsaken till varför jag aldrig sett "for" i kod jag läst. Detta är vad Ruby style guide säger om "for"

"Do not use for, unless you know exactly why."

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Legendarisk
Skrivet av Yoshman:

@Tunnelsork: ett lysande exempel på där C++11 är ett klart fall framåt jämfört med tidigare

Eftersom att tråden samlar på alternativ... Har man tillgång till C++14 så går det till och med att använda lokala variabler och loopar i constexpr-funktioner, och då kan man skriva om det till en iterativ version i de fall det inte går att evaluera direkt.

constexpr int factorial(const int n) { int p = 1; for(int i = 2; i <= n; ++i) { p *= i; } return p; }

Visa signatur

Abstractions all the way down.

Permalänk
Datavetare

@Tunnelsork: vilket inte kan emuleras med template-meta-programming då det är ett fall där man inte kan använda imperativt tänk (och därmed saknas "for" loop i traditionell bemärkelse).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer