Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Muligens kommer vi fra ulik bakgrunn, men mener du det ikke er viktig å ha referanse / bruker manualer for det språket du programmerer i for hånden eller på internet som for Java?

 

Absolutt ikke, her misforstår du meg.

Jeg må dog tilstå at jeg foretrekker Google snarere enn manualer, da det om man vet hva man ser etter ofte går raskere å finne. En annen ting er at det er forbløffende sjelden man har behov for dokumentasjon på selve språket snarere enn spesifikke API-kall.

 

Dokumentasjon er så absolutt alfa omega når det er det man har bruk for, så jeg vil tro hva vi er uenige om er hvor nyttig dokumentasjon på hvordan C håndterer pekere faktisk ville være i dette spesifikke eksemplet. En diskusjon jeg tror det kanskje er på tide å legge død nå?

Endret av ze5400
Lenke til kommentar
Videoannonse
Annonse

Sant nok! Jeg vil definitivt anbefale folk å se nærmere på Scala; det er mer eller mindre hva Java ville ha vært dersom det fortsatt var et grensesprengende språk og ikke en sendrektig komité som bruker four more years på å velge riktig lambdasyntaks.

 

...

Må nevne at Scala finnes på .NET også for dem som ikke visste det. Har ikke testet Visual Studio-støtten selv, men ser følgende på scala-lang.org:

 

You can develop Scala programs directly in MS Visual Studio. In the fall the Visual Studio plug-in for Scala will support the basic functionality expected of the IDE namely, code completion, code browsing, line breaks, expression breaks and exception reporting and so on. However, in the short term the current plug-in does not yet support code completion or code browsing.
Lenke til kommentar

En ting som derimot er veldig stygt i alle C språk er switch:

Hva er stygt med switch? Det er da svært oversiktlig å greit i stedet for å nøste ifs og elses? Gjør det enkelt, så enkelt som mulig, men ikke enklere.

 

Det Geir påpeker her er jo åpenbart ikke switch som idé i seg selv. Hele denne sidediskusjonen (basert på det å forsøke å finne noen teite små illustrerende eksempler) har ingenting med if kontra switch å gjøre heller, men noe som kan eller ikke kan være felles for dem begge.

 

Det jeg påpekte, og dette er igjen bare ett av mange eksempler satt i sammenheng med det egentlige generelle poenget jeg forsøkte å fremheve; var hvor mye ekstra "bråta" som var nødvendig for å få språk med i utgangspunktet "fin syntax" (d.v.s. ikke Lisp, i følge noen da) til å gjøre helt enkle ting som å "simulere" at if (og i grunn da så klart switch og case o.l.) er expressions fremfor statements -- d.v.s. at disse kan returnere eller "ha" verdier.

 

Jeg er uansett fornøyd; Geir har etter hva jeg kan se forstått hva jeg mente klinkende klart -- det generelle poenget både i sin helhet, men også det generelle innenfor rammene av dette eksempelet (på tvers av if, case, cond, switch, o.l.) ... og da er det forøvrig ikke så viktig for meg at han er enig eller selv synes Lisp er fantastisk; bare han forstår og kanskje t.o.m. respekterer(?) litt av grunnen til at andre mennesker faktisk sterkt foretrekker språk i Lisp-familien både m.t.p. syntax og semantikk. Altså som språk eller verktøy da -- som helhet, ikke bare "på tross av".

 

edit:

PS: Feber, og glad jeg har "The iBux" her. Synd det med Steve.

Endret av worseisworser
Lenke til kommentar
Gjest Slettet+9871234

edit:

PS: Feber, og glad jeg har "The iBux" her. Synd det med Steve.

 

Ja han døde altfor tidlig:

 

Remembering that I'll be dead soon is the most important tool I've ever encountered to help me make the big choices in life. Because almost everything – all external expectations, all pride, all fear of embarrassment or failure – these things just fall away in the face of death, leaving only what is truly important.

 

Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart." – Stanford University commencement address, 1995.

 

"… You can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something – your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life." – Stanford University commencement address , June 2005.

 

Picasso had a saying: 'Good artists copy, great artists steal.' We have always been shameless about stealing great ideas … I think part of what made the Macintosh great was that the people working on it were musicians, poets, artists, zoologists and historians who also happened to be the best computer scientists in the world." – quote from a 1994 interview shared by Huffington Post .

Kilde: http://www.myfoxphoenix.com/dpps/money/steve-jobs-quotes-in-his-words-dpgoha-20111006-fc_15355045

 

Se også:

http://www.brainyquote.com/quotes/authors/s/steve_jobs.html

Lenke til kommentar

Litt python switch/case opplegg.

Python har ikke noe default switch/case,dette har blitt foreslått tatt med i språket mange ganger.

Men man kan gjøre dette flere på måter uten lage noe eget switch/case opplegg i språket.

 

Rimlig grei måte med bruk en funksjon med dictionary og get() method.

def switch_test(case):
   return {
       42: "the ultimate answer!",
       0 : 'zero',
       }.get(case, "No case available")

I bruk.

>>> switch_test(42)
'the ultimate answer!'
>>> switch_test(0)
'zero'
>>> switch_test(12345)
'no case available'
>>> switch_test('Car')
'no case available'

Endret av SNIPPSAT
Lenke til kommentar
Gjest Slettet+9871234

Jeg har ikke ANELSE om hva dere snakker om men takk, jeg fikk noen tanker om hva jeg egentlig skulle spørre om uansett...hihi

Kunnskap begynner med spørsmål og nyskjerrighet :yes: . Noen spør mer enn ti vise kan svare :roll: .

Lenke til kommentar
... helt enkle ting som å "simulere" at if (og i grunn da så klart switch og case o.l.) er expressions fremfor statements -- d.v.s. at disse kan returnere eller "ha" verdier.

Ah, der satte du spikeren på hodet tror jeg (i alle fall en av dem). Når man først har vært eksponert for et språk hvor alt er expressions så virker det tungvindt å gå tilbake. Dette er en av de tingene som gjør at jeg synes CoffeeScript fremfor JavaScript er så fantastisk. I CoffeeScript er alt expressions.

Lenke til kommentar
Gjest Slettet+9871234

Men Forrest Gump opptrådde som programmert av statements :blush: og han var effektiv. :roll:

 

Jeg har alltid regnet Goto statements som spagetti programmering. Man kan vel ikke si det samme om switch statements?

Lenke til kommentar

Jeg har alltid regnet Goto statements som spagetti programmering. Man kan vel ikke si det samme om switch statements?

Vel, switch-statements gjør koden lite fleksibel for en viss type endringer. Utviklere som hyller objektorientering fremfor alt annet ser ikke blidt på hverken if eller switch.

 

http://www.antiifcampaign.com/

 

banner_ive-joined.gif

Endret av torbjørn marø
Lenke til kommentar
Gjest Slettet+9871234

Interessant.

 

Dette er en av de tingene som gjør at jeg synes CoffeeScript fremfor JavaScript er så fantastisk. I CoffeeScript er alt expressions.

Jeg forstår at du er en sann fan av "The Pragmatic Bookshelf":

 

http://pragprog.com/book/tbcoffee/coffeescript

 

Hva da med jQuery?

 

CoffeeScript is a little language that compiles into JavaScript. Underneath all of those embarrassing braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.

 

The golden rule of CoffeeScript is: "It's just JavaScript". The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime. You can use any existing JavaScript library seamlessly (and vice-versa). The compiled output is readable and pretty-printed, passes through JavaScript Lint without warnings, will work in every JavaScript implementation, and tends to run as fast or faster than the equivalent handwritten JavaScript.

Kilde: http://jashkenas.github.com/coffee-script/

 

:hmm: :hmm: :hmm:

Endret av Slettet+9871234
Lenke til kommentar

Apropos CoffeScript/JavaScript - er det kun for web-utvikling, eller kan disse språkene brukes som generelle script-språk. F.eks. som en erstatning for python?

Ja, det kan de. Det mest populære for tiden er Node.js, som har Google's V8 JavaScript engine i bunn. Men Node.js kan du lage alt mulig, men brukes vel mest til ulike services og server-side website-teknologi.

 

Ellers har jeg tidligere eksperimentert med å embedde en JavaScript-motor i en .NET/C#-app, og latt brukerne script med JavaScript som jeg så sender til motoren. Mener jeg brukte http://jint.codeplex.com/

 

Og overalt hvor du bruker JavaScript kan også CoffeeScript brukes.

Lenke til kommentar
Gjest Slettet+9871234

Det har vært en del skriving om annonyme / lambda funksjoner i denne tråden. Jeg kan ikke nok om dette og spør om hvor sammenfallende de to begrepene er. Er det ene en delmengde av det andre, eller har de hver sitt domene med et felles snitt eller er de to ulike uttrykk for samme begrep?

 

Er det noen som vet om denne http://lambda-the-ultimate.org/ siten er relatert til lmbda funksjoner?

Lenke til kommentar

Det har vært en del skriving om annonyme / lambda funksjoner i denne tråden. Jeg kan ikke nok om dette og spør om hvor sammenfallende de to begrepene er. Er det ene en delmengde av det andre, eller har de hver sitt domene med et felles snitt eller er de to ulike uttrykk for samme begrep?

 

Er det noen som vet om denne http://lambda-the-ultimate.org/ siten er relatert til lmbda funksjoner?

Lambda er en måte å skrive funksjoner på, og anonyme funksjoner er fynksjoner uten noe navn. Closure er at en anonym funksjon (trenger ikke egentlig være anonym, eller engang en funksjon, men er det i de fleste tilfeller) tar med seg alle refererte variabler fra et utenforliggende scope.

 

I C# er det noe forskjellig syntaks på lambda og anonyme funksjoner, dog lambda kun er kort form for anonyme funksjoner.

 

Anonym funksjon:

delegate(int a, int b) { return a + b; };

Lambda:

(a, b) => a + b;

 

En closure vil ta med seg utenforliggende data også:

var Text = "Hello World!";
Action my_lambda = () => Console.WriteLine(Text); // Action er en delegate (eller metodepeker om du vil) som hverken tar parameter, eller returnerer noe
my_lambda();

 

Til tross for at Text ikke er et parameter til lambda funksjonen, så kan den allikevel referere til den, dette selv om lambdaen blir kalt et sted der Text er utenfor scope.

Action GetHelloWorldFunc()
{
 string HelloMessage = "Hello World";
 return () => Console.WriteLine(HelloMessage);
}

void Main()
{
 var hello = GetGelloWorldFunc();
 hello();
}

Selv om HelloMessage falt ut av scope i funksjonen, er den fortsatt tilgjengelig gjennom closuren til lambdauttrykket.

  • Liker 1
Lenke til kommentar

Er det noen som vet om denne http://lambda-the-ultimate.org/ siten er relatert til lmbda funksjoner?

Er strengt tatt ikke det. Navnet er en referanse til «The Lambda Papers», hvor bl.a. scheme ble introdusert, og hvor "ordentlige" closures første gang ble implementert i programmeringsspråk-sammenheng. Siden er en form for diskusjonsforum for programmeringsspråk-teori generellt. Men du vil finne noen tråder om closures der.

Lenke til kommentar

Er det noen som vet om denne http://lambda-the-ultimate.org/ siten er relatert til lmbda funksjoner?

 

In the remotest regions, beyond the Functional Kingdoms, lies a fabled realm called Lambda the Ultimate. In this place it is said that there are no nouns at all, only verbs! There are “things” there, but all things are created from verbs, even the very integers for counting lambs, which are the most popular form of trading currency there, if the rumors speak truth. The number zero is simply
lambda()
, and 1 is
lambda(lambda())
, 2 is
lambda(lambda(lambda()))
, and so on. Every single Thing in this legendary region, be it noun, verb or otherwise, is constructed from the primal verb “lambda”.

 

Det er i prinsippet mulig å bruke lambdaer som et fundament for videre programmering. Det klassiske SICP-eksemplet er å definere cons, car og cdr på denne måten,[2] som vi kan tenke på som Lisp-sjargong for pair, first og second. La pair være en funksjon som returnerer et par med verdier, first returnere den første verdien til paret, og second returnere den andre:

 

> (pair "foo" "bar")
#<par av "foo" og "bar">

> (first (pair "foo" "bar"))
"foo"

> (second (pair "foo" "bar"))
"bar"

 

Den vanlige måten å implementere dette på ville være å konstruere en listestruktur – et stykke data – med pair, og så la first og second hente ut riktig element fra strukturen. SICP sin fremgangsmåte er derimot å implementere paret som en prosedyre:

 

(define (pair x y)
 (lambda (m)
   (cond
    ((= m 1) x)
    ((= m 2) y))))

(define (first z)
 (z 1))

(define (second z)
 (z 2))

 

Her returnerer pair en anonym funksjon (som lages med lambda i Lisp). Denne funksjonen inneholder argumentene til pair:

 

> (pair "foo" "bar")
#<prosedyre som inneholder "foo" og "bar">

 

Det first og second så gjør, er å kalle prosedyren med et bestemt argument slik at den første eller andre verdien returneres. Dermed vil (first (pair "foo" "bar")) fortsatt gi "foo", og (second (pair "foo" "bar")) gi "bar". På papiret en helt adekvat implementasjon.

 

Koden over forutsetter closures, dvs. at prosedyren som pair returnerer, er i stand til å «stikke av med» argumentene til pair – se GeirGrusoms innlegg over. (Hvis Lisp’en din mangler dette, kan du alltids jukse ved å konstruere lambdaen som en liste og splice inn øyeblikksverdiene av x og y.) Dermed kan man for så vidt tenke på prosedyren som et «objekt», dvs. en bunt med data og instruksjoner. (I Scala er funksjoner objekter.)

 

Denne litt alternative måten å konstruere «objekter» på – å lage anomyme funksjoner som lukker om bindingene i et leksikalsk skop – er faktisk mye brukt i funksjonelle språk. Google «let over lambda» når du har tid.

 

Endret av epsil
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...