přihlásit se
k47.cz
Nyní pod dohledem Systémového Supervizora

Scala - dynamický jazyk

autor: kaja47 - CC by - publikováno: - sekce obsah » programování #2283
Tento článek obsahuje zhruba 300 slov a jeho přečtení Vám zabere 1 až 3 minuty

Scala je velice flexibilní jazyk (to už víme) a dá se v něm udělat téměř nemožné. A hranice nemožného se pořád posouvají.

Takže pokud vám z nějakého důvodu (neodvážím se domýšlet proč) v jazyce chybí vyhodnocování pravdivosti známé z dynamických jazyků jako třeba PHP, Python nebo Perl, kdy se jako true vyhodnotí všechna nenulová čísla, neprázdné řetězce a kolekce, stačí čtyři řádky kódu a Scala se bude chovat přesně takhle.

Je to děsivý hack a nikomu ho nedoporučuji použít, protože jím velice oslabíte statickou typovou kontrolu a věci se mohou začít chovat velice divně. Implicitní konverze se totiž nebudou používat jenom v podmínkách nebo ve while cyklu, ale všude, kde nebudou sedět typy, což může vést ke katastrofě biblických rozměrů.

Takže ještě jednou: bůh s tím, kdo tohle použije, ale jako demonstrace možností Scaly je to docela pěkné, ne?

implicit def longToBool(l: Long) = l != 0.toLong
implicit def doubleToBool(d: Double) = d != 0.0
implicit def traversableToBool[T <% scala.collection.Traversable[_]](t: T) = t != null && t.nonEmpty
implicit def optionToBool(o: Option[_]) = (o != null) && (o match { case _: Some[_] => true; case None => false })

// test
if (1)               println("true") else println("false")   // true
if (0)               println("true") else println("false")   // false
if (1.0)             println("true") else println("false")   // true
if (0.0)             println("true") else println("false")   // false
if (1.toLong)        println("true") else println("false")   // true
if (0.toLong)        println("true") else println("false")   // false
if ("asdf")          println("true") else println("false")   // true
if ("")              println("true") else println("false")   // false
if (List(1, 2, 3))   println("true") else println("false")   // true
if (List())          println("true") else println("false")   // false
if (Nil)             println("true") else println("false")   // false
if (Array("asdf"))   println("true") else println("false")   // true
if (Array[String]()) println("true") else println("false")   // false
if (Some(1))         println("true") else println("false")   // true
if (None)            println("true") else println("false")   // false
if (null)            println("true") else println("false")   // false

komentáře RSS

Zatím žádné komentáře. Buďte první.
Komentář bude formátován pomocí Texy! syntaxe.
Např: **tučný text**, *kurzíva*, "text odkazu":adresa.
Na ostatní komentáře můžete odkazovat pomocí [čísla komentáře].

Napište komentář!

 

o autorovi:

K. Jmenuji se Karel Čížex, v síti také známý jako kaja47 - tak trochu spisovatel, trochu programátor, trochu webař, milovník divné hudby atd atd.
mail:
jabber: kaja47@jabbim.cz

další projekty

wyhledawacz fel.log stalkr vtipy.k47.cz k47.shop Zkracovač adres stripbot

živě z twitteru

@spazef0rze http://t.co/rUh3R1sYen
@spazef0rze V PHP se to dá oháčkovat nějak takto: https://t.co/jyJMPONMov
@spazef0rze T_STRING je posloupnost znaků, T_CONSTANT_ENCAPSED_STRING je string literál. Potud je to konzistentní.
@spazef0rze Stejně tak nemůže mít jméno class, and, function nebo jakékoli jiné klíčové slovo. Divný je hlavně, že $a-&gt;list() je validní.

tadá

poslední články

Kdo nečte s námi, čte proti nám
článek | 30. dubna 2013
Oldboy
film | 13. dubna 2013
Jon Richardson vs. Sean Lock
článek | 4. dubna 2013
Zvuky!
článek | 29. března 2013
Co všechno neexistovalo, když jsem začínal s k47čkou
interní článek | 25. března 2013
Kdyby se někdo ptal, zapírej
| 17. března 2013
Horečka #4
povídka | 17. března 2013
Horečka #3
povídka | 17. března 2013
Horečka #2
povídka | 17. března 2013

poslední komentáře

Přeprava cestujících v Simutrans
Šimon-Erich Jelínek | 19. května 2013
Přeprava cestujících v Simutrans
Šimon-Erich Jelínek | 19. května 2013
Horečka #1
adam | 9. května 2013
Futurama
Saja | 21. března 2013
Skupinová samomluva 4
kaja47 | 16. března 2013

největší kecalové

Lisured Lisured
Daniel Daniel

K47i © 2002 - 2013 K. aka Kaja47