Gå till innehåll
Just nu i M3-nätverket

Humortråden


MahdiM
 Share

Rekommendera Poster

  • Svars 4k
  • Created
  • Senaste svar

Mest aktiva i detta ämne

  • xeric

    627

  • Axelman

    561

  • Alix

    470

  • Pocahontas

    355

Det är en bugg, så nej... inget kul med buggar. Men vad den gör är lite kul. ^_^Javascript from hell.

 

Fattar nada.

Länk till kommentar
Dela på andra webbplatser

Skriptet räknar fel. :)

Skall man vara riktigt petnoga så att den räknar ö h t som är fel. :D "5" är en textsträng och 2 ett tal (integer). Så, sista exemplet blir (halv-)rätt. "5" + 2 är 52, precis som "Hej" + "Hej" är HejHej

Länk till kommentar
Dela på andra webbplatser

Skall man vara riktigt petnoga så att den räknar ö h t som är fel. :D "5" är en textsträng och 2 ett tal (integer). Så, sista exemplet blir (halv-)rätt. "5" + 2 är 52, precis som "Hej" + "Hej" är HejHej

 

Men första exemplet då? Är det en beräkning?

Länk till kommentar
Dela på andra webbplatser

Skriptet räknar fel. :)

 

Jag börjar förstå det. För mig är det siffror och tecken som betyder nada eller vad som helst.

Länk till kommentar
Dela på andra webbplatser

Men första exemplet då? Är det en beräkning?

Ja, den räknar ju “rätt” i 1'a där, men gör fel. Man kan inte blanda olika typer av värden. "5" är en sträng - så det kunde lika gärna stått "Fem". Det saknas kontroller s a s. För att bäst illustrera det (som saknas)... Om man kör samma i Python's konsol:

 

post-64246-0-60704900-1479904969_thumb.jpg

 

Länk till kommentar
Dela på andra webbplatser

Ja, den räknar ju “rätt” i 1'a där, men gör fel. Man kan inte blanda olika typer av värden. "5" är en sträng - så det kunde lika gärna stått "Fem". Det saknas kontroller s a s. För att bäst illustrera det (som saknas)... Om man kör samma i Python's konsol:

 

 

 

Hur kan den ”räkna rätt” i första? Det kan ju knappast vara en slump…

Och hur funkar det i Python med ”sträng till tal” som du visade – int("5")?

Länk till kommentar
Dela på andra webbplatser

OM man måste förklara det som är roligt, kanske det inte är så roligt. :hihihi:

Länk till kommentar
Dela på andra webbplatser

Det är en bugg, så nej... inget kul med buggar. Men vad den gör är lite kul. ^_^Javascript from hell.

Det är ingen bugg, språket är tänkt att fungera så.

 

 

Hur kan den ”räkna rätt” i första? Det kan ju knappast vara en slump…

Och hur funkar det i Python med ”sträng till tal” som du visade – int("5")?

 

Javascript har ett väldigt svagt typsystem, vilket enkelt uttryckt innebär att ett värdes typ (heltal, text, sanningsvärde.....) anpassas efter omgivningen.

Den första raden innehåller textsträngen "5" och från den ska heltalet 2 subtraheras. Eftersom det är ganska lätt att ändra textsträngen "5" till heltalet 5 så betraktades den som ett heltal.

I den andra raden tolkas plustecknet som konkatenering och omvandlar heltalet 2 till textsträngen "2".

Undrar hur

 

5 + "2"

hade tolkats?

 

Som jämförelse kan nämnas Java, där man måste ange vilken typ ett värde har.

 

Ex:

int x = 2

String y = "5"

char z = '5'

 

I Java kontrolleras även koden innan programmet "tillverkas"; försöker du addera text med ett heltal så kommer typcheckaren undra vad fan du sysslar med.

 

https://sv.wikipedia.org/wiki/Konkatenering

Länk till kommentar
Dela på andra webbplatser

Hur kan den ”räkna rätt” i första? Det kan ju knappast vara en slump…

 

 

Och hur funkar det i Python med ”sträng till tal” som du visade – int("5")?

# Det är det som blirr “fel”. Den tar helt enkelt siffran och tolkar det som ett tal. Man får inte lura sig på "citattecknen", de syns inte när den läses sen (t ex kör i Terminal: echo "5"). Men även om resultatet av "5" visas som 5 så är det fortfarande en textsträng. Oavsett om det står "5" - 2 eller "Fem" - 2 så skall man inte kunna beräkna det. PHP gör liknande, och räknar t o m “rätt” på 2'a exemplet - även om man slår på “strict”. :rolleyes: Men där finns lite andra funktioner så man kan validera innan man kör det så den inte kör fel. Finns sökert liknande i JS.

 

 

# Man kan köra om strängen till en integer med int("5") - eftersom det är den siffra (5). Och det kan man med javascript med. Heter: parseInt(). Så konverterar man textsiffran till ett tal. Alla språk har lika/liknande funktioner.

Länk till kommentar
Dela på andra webbplatser

post-74999-0-40146200-1479910788_thumb.jpg

  • Rösta upp 2
Länk till kommentar
Dela på andra webbplatser

# Det är det som blirr “fel”. Den tar helt enkelt siffran och tolkar det som ett tal. Man får inte lura sig på "citattecknen", de syns inte när den läses sen (t ex kör i Terminal: echo "5"). Men även om resultatet av "5" visas som 5 så är det fortfarande en textsträng. Oavsett om det står "5" - 2 eller "Fem" - 2 så skall man inte kunna beräkna det. PHP gör liknande, och räknar t o m “rätt” på 2'a exemplet - även om man slår på “strict”. :rolleyes: Men där finns lite andra funktioner så man kan validera innan man kör det så den inte kör fel. Finns sökert liknande i JS.

 

 

# Man kan köra om strängen till en integer med int("5") - eftersom det är den siffra (5). Och det kan man med javascript med. Heter: parseInt(). Så konverterar man textsiffran till ett tal. Alla språk har lika/liknande funktioner.

 

Okej, den hämtar alltså de siffror som finns i texten och gör tal av dem. Så om man skriver:

int("fem")

händer inget (eller blir det error?

 

På samma sätt blir:

int("potatis")

ingenting heller?

 

Men om man skriver:

int("p0tat15")

så blir det 015?

Länk till kommentar
Dela på andra webbplatser

Javascript har ett väldigt svagt typsystem, vilket enkelt uttryckt innebär att ett värdes typ (heltal, text, sanningsvärde.....) anpassas efter omgivningen.

Den första raden innehåller textsträngen "5" och från den ska heltalet 2 subtraheras. Eftersom det är ganska lätt att ändra textsträngen "5" till heltalet 5 så betraktades den som ett heltal.

I den andra raden tolkas plustecknet som konkatenering och omvandlar heltalet 2 till textsträngen "2".

 

 

Men förhållandet mellan textsträng och heltal är ju 1:1 i båda fallen, men med olika resultat. Är det plustecknet och minustecknet som avgör?

Länk till kommentar
Dela på andra webbplatser

Okej, den hämtar alltså de siffror som finns i texten och gör tal av dem. Så om man skriver:

int("fem")
händer inget (eller blir det error?

 

På samma sätt blir:

int("potatis")
ingenting heller?

 

Men om man skriver:

int("p0tat15")
så blir det 015?

 

Nej, den blir också fel. Men med en sånt text kan man ju alltid filtrera ut siffrorna med ngn form av regex - om man nu vill åt dem. Men alla 3 blir bara fel. Rena tal, eller tal med decimaler går att göra om från str till int (el float).

 

Rensade ur lite meddelanden, med felen finns med:

>>> int("Fem")
ValueError: invalid literal for int() with base 10: 'Fem'

>>> int("5")
5

>>> int("potatis")
ValueError: invalid literal for int() with base 10: 'potatis'

>>> int("p0tat15")
ValueError: invalid literal for int() with base 10: 'p0tat15'

 

Ett tal kan man ju alltid (omvänt) göra till en sträng med, antingen bara att sätta "" runt eller med str()

>>> "potat" + 15
TypeError: Can't convert 'int' object to str implicitly

>>> "potat" + str(15)
'potat15'

 

Inte så bra exempel eftersom man skriver 15 för hand. Men om man t ex får ett värde från nåt annat ställe i t ex ett skript/program, så kanske det ser ut så här:

VAR = "foobar_" + str(nr)

print(VAR)       # foobar_123
Länk till kommentar
Dela på andra webbplatser

SToPP!! :policeman: Detta är en HUMORTRÅD!! :spam:

 

Ja. Och detta får väl nästan ses som ett typexempel på vad som NE beskriver så här:

post-13709-0-07515100-1479917063_thumb.png

  • Rösta upp 1
Länk till kommentar
Dela på andra webbplatser

Jadå... :D Måste väl få svara på frågorna som skrvivs i a f?

 

Men man får inte riva av ett helt utbildningspass.... :armskeptisk:

Länk till kommentar
Dela på andra webbplatser

SToPP!! :policeman: Detta är en HUMORTRÅD!! :spam:

Javascript är humor.

 

 

Men förhållandet mellan textsträng och heltal är ju 1:1 i båda fallen, men med olika resultat. Är det plustecknet och minustecknet som avgör?

 

Jag kan inte alls Javascript, men...

Språket verkar liksom Java använda samma symbol (plustecknet +) för två olika funktioner/operationer, nämligen addition av numeriska värden samt konkatenering av textsträngar. Då man inte måste ange en variabels typ så måste skripttolken gissa vad det handlar om, alternativt avsluta körningen, med eller utan krasch.

 

I fallet "5" - 2 gissar jag att systemet läser texten "5" och tycker "inga problem", läser vidare och hittar en subtraktionsoperator, tycker att det där "5" kan man faktiskt tolka som 5, då kan man subtrahera. Sedan kommer 2 som enkelt kan subtraheras från 5. Allt gick bra!

 

I fallet "5" + 2 gissar jag att systemet börjar som i det andra fallet och hittar sedan ett plustecken, som ju har två betydelser. Eftersom första operanden är en textsträng så bestämmer systemet att nu ska det konkateneras text. Sedan dyker 2 upp, en siffra som lätt kan omvandlas till en textsträng, som i sin tur hängs på efter "5".

 

I Java är det annorlunda, där börjar kompilatorn med att kolla variablers typer och att operatorer/funktioner får rätt indata innan programmet kompileras och kan köras. Javascript kompileras inte utan körs direkt utan koll. Jag har för mig att man ska kunna ersätta sanningsvärdena true och false med 1 och 0 lite efter behag.

 

Se exempel: https://sv.wikipedia.org/wiki/Javascript#Syntax

 

Tittar man på det ännu nödigare språket Haskell så har additionsfunktionen + följande typsignatur:

(+) :: Num a => a -> a -> a

vilket på svenska betyder att a är ett numeriskt värde och att funktionen tar två värden av godtycklig typ a som indata och returnerar ett värde av typ a.

Konkateneringsfunktionen har ett eget "namn", ++, och har typsignaturen

(++) :: [a] -> [a] -> [a]

vilket betyder att funktionen tar två listor som båda innehåller värden av typ a och returnerar en lista som innehåller värden av typ a.

Så i Haskell slipper man/datorn fundera på vilket funktion som efterfrågas.

Redigerad av Mattiasgbg
Länk till kommentar
Dela på andra webbplatser

... konkatenering ...

 

... konkatenering ... konkateneras ... Konkateneringsfunktionen ...

Det är ett evigt konkande med all denna kod! :lol:

Länk till kommentar
Dela på andra webbplatser

 Share




×
×
  • Skapa nytt...