Você está na página 1de 11

FACULDADE LOURENO FILHO CURSO DA CINCIA DE COMPUTAO TRABALHO DA TOPICOS EM COMPUTAO | 8 SEMESTRE Joel Amaque a S!l"a I# ! $ %&'() * Em!l!

a Me#e+e+ L!ma )('(,

INTRODUO S-ala .S-ala/le la#0ua0e1 2 uma l!#0ua0em e 34o04ama56o e 34o37+!8o 0e4al9 !0a:+e mul8!3a4a !0ma9 34o;e8a a 3a4a e<34e++a4 3a 4=e+ e 34o04ama56o -omu#+ e uma >o4ma -o#-!+a9 ele0a#8e e 8?3e:+a>e@ Ela !#-o43o4a 4e-u4+o+ e l!#0ua0e#+ o4!e#8a a+ a o/;e8o+ e >u#-!o#a!+@ Tam/2m 2 3le#ame#8e !#8e4o3e4A"el -om Ja"a@ S-ala 2 a +u-e++o4a e Fu##el9 uma l!#0ua0em /a+ea a em ;o!# -al-ulu+@ S-ala 2 +o>8Ba4e e -7 !0o a/e48o@ Reque4 JDC "e4+6o &@D ou +u3e4!o4@ E "!+8o 3o4 mu!8o+ -omo FMelGo4 ;a"aF9 3o!+ "em ma#8e# o a !#8e4o3e4a/!l! a e >o48e -om Ja"a9 e#qua#8o9 ao me+mo 8em3o !#8e04a# o a 34o04ama56o >u#-!o#al9 ;u#8ame#8e -om mo elo e 34o04ama56o o4!e#8a a a o/;e8o9 l!m3a# o o que mu!8a+ "eHe+ +6o -o#+! e4a o+ -omo 8e# o +! o a+ e-!+=e+ e e+!0# 3o/4e em Ja"a e a !-!o#a# o uma +24!e e ou84o+ 4e-u4+o+ e+e#"ol"! o+ 3a4a 3e4m!8!4 que o -7 !0o >!-a ma!+ l!m3o9 ma!+ -o#-!+a e ma!+ e<34e++!"a 3a4a +e4 e+-4!8o@ S-ala >o! !#"e#8a a #a E-ole Pol?8e-G#!que F2 24ale e Lau+a##e .EPFL19 Lau+a#a #a SuI5a9 em (''& 3o4 Ma48!# O e4+J?@ Fo! l!/e4a a 3u/l!-ame#8e #a 3la8a>o4ma Ja"a em ;a#e!4o e (''D9 e #a 3la8a>o4ma @NET em ;u#Go o me+mo a#o@ Uma +e0u# a "e4+6o a l!#0ua0em >o! l!/e4a a em Ma45o e (''K@ Em !8al!a#o9 S-ala +!0#!>!-a uma e+-a a9 ou e8a3a+9 #a "e4 a e9 S-ala 3e4m!8e que "o-L 3a++e a 8e4 um am/!e#8e e 34o04ama56o que !#-lu! al0uma+ a+ melGo4e+ l!#0ua0e#+ 4e-e#8e+ e a 3e#+a4 #a l!#0ua0em e 34o04ama56o -om ou84a -o#-e356o9 ao me+mo 8em3o9 3e4m!8!# o:lGe u8!l!Ha4 8o o o +eu -7 !0o Ja"a e<!+8e#8e@ Ela >o4#e-e uma +!#8a<e Mle"eM 3a4a e>!#!56o e >u#5=e+ a#N#!ma+9 ela +u3o48a G!0Ge4: o4 e4 >u#-8!o#+9 ela 3e4m!8e que >u#5=e+ +e;am a#!#Ga a+9 e +u3o48a -u44?!#0@ Cla++e+ S-ala e +eu +u3o48e !#8e4#o 3a4a 3a88e4# ma8-G!#0 mo ela 8!3o+ al02/4!-o+ u+a o+ em mu!8a+ l!#0ua0e#+ e 34o04ama56o >u#-!o#a!+@ Al2m !++o9 +ua #o56o e M3a88e4# ma8-G!#0M #a8u4al 2 e+8e# ! a 3a4a o 34o-e++ame#8o e a4qu!"o+ OML -om a a;u a e e<34e++=e+ 4e0ula4e+@ Ne+8e -o#8e<8o9 a l!#0ua0em +e 8o4#a e 04a# e "al!a 3a4a o 34o-e++ame#8o e +!#8a<e+ >u8u4a+@ E+8a+ -a4a-8e4I+8!-a+9 >aHem -om que o S-ala +e;a ! eal 3a4a o e+e#"ol"!me#8o e a3l!-a5=e+ -omo Be/ +e4"!-e+@ E<em3loP
def qsort(l: List[Int]): List[Int] = { l match { case List() => l case _ => qsort(for(x <- l.tail if x < l.head) yield x) ::: List(l.head) ::: qsort(for(x <- l.tail if x >= l.head) yield x) } }

O e+!0# o S-ala9 4e-o#Ge-e o >a8o e9 #a 34A8!-a9 o e+e#"ol"!me#8o e a3l!-a5=e+ e omI#!o:e+3e-I>!-o 4eque4em e<8e#+=e+ a l!#0ua0e#+ e omI#!o:e+3e-I>!-o@ O S-ala >o4#e-e uma -om/!#a56o Q#!-a e me-a#!+mo+ e l!#0ua0em9 que 3o++!/!l!8am a a !56o e -o#+84u5=e+ #a >o4ma e /!/l!o8e-a+9 e -om /oa >a-!l! a eP qualque4 m28o o 3o e +e4 u+a o -omo um o3e4a o4 34e>!<o ou +u>!<o -lo+u4e+ +6o -o#+84uI a+ au8oma8!-ame#8e e3e# e# o o 8!3o e+3e4a o .8a40e8 8?3!#01@ A ;u#56o a+ ua+ -a4a-8e4I+8!-a+9 >a-!l!8a a e>!#!56o e #o"o+ M+8a8eme#8+M +em e+8e# e4 a +!#8a<e e +em u+a4 a mA0!-a a me8a:34o04ama56o@ INTERRAO COM JASA Um o+ ma!o4e+ 3o e4e+ a S-ala 2 +ua -a3a-! a e e !#8e04a56o >A-!l -om o Ja"a@ To a+ a+ -la++e+ o 3a-o8e ;a"a@la#0 +6o !m3o48a a+ 3o4 3a 46o9 e#qua#8o que 8o a+ a+ ou84a+ 3o em +e4 !m3o48a a+ e<3l!-!8ame#8e@ Um e<em3lo9 +u3o# o que 34e-!+a:+e o/8e4 e >o4ma8a4 a a8a -o44e#8e e a-o4 o -om a -o#"e#56o u+a a #um 3aI+ e+3e-I>!-o9 3o4 e<em3lo a F4a#5a@ A /!/l!o8e-a e -la++e+ Ja"a e>!#e um 3o e4o+o -o#;u#8o e -la++e+ u8!l!8A4!a+9 -omo Da8e e DateFormat@ Como S-ala !#8e4a0e !4e8ame#8e -om Ja"a9 #6o e<!+8em -la++e+ equ!"ale#8e+ #a /!/l!o8e-a e -la++e+ S-alaP +!m3le+me#8e +e !m3o48a o+ 3a-o8e+ Ja"a -o44e+3o# e#8e+P
import java. til.{!ate" Lo#ale} import java.text.!ate$or%at import java.text.!ate$or%at._ object $ren#h!ate { def %ain(ar&s: 'rra([)trin&]) { val no* = new !ate val d+ = &et!ateInstan#e(L,-." Lo#ale.$/'-01) 2rintln(d+ +or%at no*) } }

O import a S-ala 2 /em 3a4e-! o -om o +eu equ!"ale#8e em Ja"a9 ma+ 2 a!# a ma!+ 3o e4o+o@ Mul8!3la+ -la++e+ 3o em +e4 !m3o48a a+ e um me+mo 3a-o8e a84a"2+ o u+o e -Ga"e+9 -omo #a 34!me!4a l!#Ga@ Ou84a !>e4e#5a 2 que qua# o 34e-!+a !m3o48a4 8o a+ a+ -la++e+ e um 3a-o8e u+a:+e o +u/l!#Ga o .u# e4+-o4e1 .T1 ao !#"2+ o a+8e4!+-o .U1@ I++o o-o44e 3o4 que o a+8e4!+-o 2 um ! e#8!>!-a o4 "Al! o em S-ala .3o4 e<em3lo9 o #ome e um m28o o1@ O import #a 8e4-e!4a l!#Ga 84aH 8o o+ o+ mem/4o+ a -la++e DateFormat@ I++o >aH o m28o o e+8A8!-o getDateInstance e o -am3o e+8A8!-o LONR !4e8ame#8e "!+!"e!+@ De#84o o m28o o ma!# -4!a:+e 34!me!4o uma !#+8V#-!a a -la++e Da8e o Ja"a9 que 3o4 3a 46o -o#82m a a8a a8ual@ A +e0u!49 e>!#e:+e o >o4ma8o a a8a u+a# o o m28o o e+8A8!-o getDateInstance9 que >o! !m3o48a o a#8e4!o4me#8e@ F!#alme#8e9 3o e:+e !m34!m!4 a a8a a8ual >o4ma8a a e a-o4 o -om a !#+8V#-!a lo-al!Ha a e DateFormat@ E+8a Ql8!ma l!#Ga mo+84a uma 34o34!e a e !#8e4e++a#8e a l!#0ua0em S-alaP m28o o+ que 4e-e/em a3e#a+ um a40ume#8o 3o em +e4 u+a o+ -om uma +!#8a<e #6o >!<a@ De+8a >o4ma9 a e<34e++6o df format now 2 a3e#a+ ou84a >o4ma me#o+ e<8e#+a e e+-4e"e4 e+8a e<34e++6o df.format(now) . I+8o 3o e +e4 um e8alGe me#o4 a +!#8a<e9 ma+ 3o++u! -o#+equL#-!a+ !m3o48a#8e+@ FUNWES ANXNIMAS
Object 3i%er'non(%o s {

def on#e4er)e#ond(#all5a#6: () => nit) { while (true) { #all5a#6()7 3hread slee2 8999 } } def %ain(ar&s: 'rra([)trin&]) { on#e4er)e#ond(() => 2rintln(:o te%2o #orre #o%o } }

% raio...:))

A 34e+e#5a e uma >u#56o a#N#!ma #e+8e e<em3lo 2 4e"ela a 3elo +Im/o o e YZ[\ que +e3a4a o+ a40ume#8o+ a >u#56o e +eu -o43o@ Ne+8e e<em3lo9 a l!+8a e a40ume#8o+ e+8A "aH!a9 o que 3o e +e4 "!+8o 3elo 3a4 e 3a4e#8e+e+ +em #a a e#84o a e+que4 a a >le-Ga@ CLASSES Como "!mo+ a-!ma9 S-ala 2 uma l!#0ua0em o4!e#8a a a o/;e8o+9 e e++a >o4ma 3o++u! o -o#-e!8o e -la++e+@ E++a+ -la++e+9 em S-ala9 +6o e-la4a a+ u+a# o uma +!#8a<e mu!8o 3a4e-! a -om a o Ja"a@ Uma a+ !>e4e#5a+ ma!+ ma4-a#8e+ 2 que -la++e+ em S-ala 3o em 8e4 3a4Vme84o+@ I++o 2 !lu+84a o -om a e>!#!56o a/a!<o e uma -la++e 3a4a #Qme4o+ -om3le<o+P
class 0o%2lex(real: !o 5le" i%a&inar(: !o 5le) { def re() = real def i%() = i%a&inar( }

E++a -la++e Com3le< 4e-e/e o!+ a40ume#8o+9 que +6o a 3a48e 4eal e a 3a48e !ma0!#A4!a e um #Qme4o -om3le<o@ E+8e+ a40ume#8o+ e"em +e4 3a++a o+ #o mome#8o a -4!a56o e uma !#+8V#-!a a -la++e Com3le<9 a +e0u!#8e ma#e!4aP new Complex(1.5, 2.3) A -la++e -o#82m o!+ m28o o+9 -Gama o+ re e im9 que 6o a-e++o a am/a+ a+ 3a48e+ o #Qme4o@ Re3a4e que o 8!3o e 4e8o4#o e++e+ o!+ m28o o+ #6o 2 e+3e-!>!-a o e<3l!-!8ame#8e@ Ele +e4A e>!#! o au8oma8!-ame#8e 3elo -om3!la o49 que olGa o+ m28o o+ e e uH que o "alo4 e 4e8o4#o e am/o+ 2 um Double@ O -om3!la o49 3o42m9 3o e #6o e+8a4 +em34e a38o a +a/e4 qual o 8!3o e 4e8o4#o9 e #6o GA uma 4e04a +!m3le+ 3a4a +a/e4 qual o 8!3o que ele e>e8!"ame#8e u+ou@ Na 34A8!-a !++o #6o 2 um 34o/lema "!+8o que o -om3!la o4 +a/e que +7 3o e mu a4 o 8!3o que #6o >o! e<3l!-!8ame#8e 3a++a o@ Como uma !-a9 o 34o04ama o4 !#!-!a#8e em S-ala e"em 8e#8a4 om!8!4 8!3o+ qua# o e++e+ >o4em >A-e!+ e 3e4-e/e4 #o -o#8e<8o9 e "e4 -omo o -om3!la o4 +e -om3o48a@ A37+ al0um 8em3o o 34o04ama o4 8e4A um /om >eel!#0 +o/4e que 8!3o 3o e ou #6o om!8!4@ METODOS SEM ARRUMENTOS Um 3eque#o 34o/lema o+ m28o o+ 4e e !m 2 que9 3a4a o+ -Gama49 e"e:+e u+a4 um 3a4 e 3a4e#8e+e+ "aH!o+ ao la o e +eu #ome9 -omo 3o e +e4 "!+8o a/a!<oP
object ComplexNumbers { def main(args: Array[String]) { al c ! ne" Complex(#$%& '$() println()imaginary part: ) * c$im()) + +

Se4!a !#8e4e++a#8e a-e++a4 a 3a48e 4eal e a 3a48e !ma0!#A4!a -omo -am3o+9 +em a #e-e++! a e

e -olo-a4 e++e 3a4 e 3a4e#8e+e+ ao la o o #ome@ I++o 3o e +e4 >e!8o em S-ala a84a"2+ a e>!#!56o e m28o o+ +em a40ume#8o+@ No++a -la++e Com3le< 3o e +e4 4ee+-4!8a -omo a/a!<oP
class Complex(real: ,ouble& imaginary: ,ouble) { def re ! real def im ! imaginary +

HERANAS E POLIMORFISMO To a+ a+ -la++e+ em S-ala Ge4 am e uma +u3e4:-la++e@ ]ua# o #6o 2 !#>o4ma a e qual +u3e4:-la++e e"e4A Ge4 a49 3o4 3a 46o +-ala@O/;e-8@ Em S-ala 2 o/4!0a874!o e+3e-!>!-a4 que o m28o o e+8A +e# o +o/4e+-4!8o a84a"2+ o u+o o mo !>!-a o4 override9 3a4a e"!8a4 +o/4e+-4!8a+ a-! e#8a!+@ Po4 e<em3loP
class Complex(real: ,ouble& imaginary: ,ouble) { def re ! real def im ! imaginary o erride def toString() ! ) ) * re * (if (im - .) )) else )*)) * im * )i) +

CLASSES CASE E LOCALI^AO DE PADRWES Ca+e Cla++e+ +6o um -a+o e -la++e+ -om 4e04a+ 342: e>!#! a+ em 8em3o e -om3!la56o9 e ma#e!4a que +e 3e4m!8a e<e-u8a4 al0uma+ ou84a+ o3e4a5=e+ +o/4e 8a!+ -la++e+ >a-!l!8a# o al0uma+ mo ela0e#+9 e a;u a# o #a a3l!-a56o e al0uma+ /oa+ 34A8!-a+@ Ima0!#e que que4emo+ mo ela4 um !#8e434e8a o4 e e<34e++=e+ ma8emA8!-a+ que +6o e+-4!8a+ em o/;e8o+ o #o++o omI#!o@ Po4 e<em3lo9 que4emo+ !#8e434e8a4 o 4e+ul8a o e & _ ., _ )19 e 4e34e+e#8a# o em #o++o mo elo9 que4emo+ o/8e4 al0o -omoP
8ne* ) %(ne* - %5er(8)" ne* ) %(ne* - %5er(;)" ne* - %5er(<)))

Uma ma#e!4a o4!e#8a a a o/;e8o+ e +e !m3leme8a4 8al omI#!o 3o e4!a +e4 al0o -omoP
8trait 1x2r { = de+ eval: Int ;} >#lass - %5er(n: Int) extends 1x2r { ? de+ eval: Int = n @} <#lass ) %(e8: 1x2r" e=: 1x2r) extends 1x2r { A de+ eval: Int = e8.eval C e=.eval B}

A !m3leme#8a56o 2 /a+8a#8e l!m3a e #o++o !#8e434e8a o4 +e4!a ma!+ +!m3le+ a!# aP


8o5je#t Inter { = de+ inter(e: 1x2r) = ; e.eval >}

Em S-ala e<!+8e a e>!#!56o e Ca+e Cla++@ Pa4a -4!a4 uma Ca+e Cla++ /a+8a a !-!o#a4 o mo !>!-a o4 -a+e a#8e+ a e>!#!56o a -la++e@ Em #o++o e<em3lo >a5a a+ +e0u!#8e+ mu a#5a+P
8#ase #lass - %5er(n: Int) extends 1x2r =#ase #lass ) %(e8: 1x2r" e=: 1x2r) extends 1x2r

Case classes +e0uem a+ +e0u!#8e+ 4e04a+P & $ Po++uem um -o#+84u8o4 e>!#! o e<a8ame#8e -om o me+mo #ome e>!#! o #a -la++e@ Em #o++o e<em3loP
8de+ - %5er(n: Int) = ne* - %5er(n)
Dessa forma possvel escrever nossa expresso 1 + (3 + 7) da seguinte forma:

8) %(- %5er(8)" ) %(- %5er(;)" - %5er(<)))

( $ O+ m28o o+ toString9 equals e hashCode ;A e+86o !m3leme#8a o+ +e0u!# o a e>!#!56o a -la++e -om +eu+ a84!/u8o+@ Pa4a #o++o e<em3lo -om Num/e49 e++e+ m28o o+ ;A le"am em -o#+! e4a56o o a84!/u8o#9 e!<a# o e -om3a4a4 o+ o/;e8o+ 3o4 e# e4e5o e mem74!a@ O+ o3e4a o4e+ZZe`Z8am/2m ;A e+86o e>!#! o+ em >u#56o o equal+@ , $ To o+ o+ a84!/u8o+ 3a++a o+ #o -o#+84u8o4 3o++uem o+ m28o o+ e a-e++o 3Q/l!-o ;A e>!#! o+@ Em #o++o e<em3lo9 Num/e4 e Sum ;A 3o++uem o+ +e0u!#8e+ m28o o+P
8de+ n: Int 8de+ e8: 1x2r" e=: 1x2r

Fa8o !m3o48a#8e 2 que 8a!+ -la++e+ +e 8o4#am !mu8A"e!+9 ou +e;a9 #6o e<!+8e um m28o o 3a4a al8e4a4 o "alo4 o+ a84!/u8o+9 e #em 2 3o++I"el e>!#I:lo+@ D $ Ca+e Cla++e+ 3o em +e4 u+a a+ 3a4a pattern matching9 que 2 uma o3e4a56o !+3o#I"el em S-ala e que "e4emo+ a0o4a@ MATCH O SaITCH S!mo+ que a -la++e /a+e o S-ala 2 o A#?9 e que 8o o+ o/;e8o+ 3o em +e4 84a8a o+ -omo 8al@ A#? e>!#e uma >u#56o que 3e4m!8e "e4!>!-a4 o 8!3o e -la++e que e+8A +e# o 84a8a o e 8oma4 a a8!8u e -o44e+3o# e#8e@ Samo+ ao e<em3lo que e<3l!-a melGo4 o -om3o48ame#8o@ Em #o++o o/;e-8 I#8e49 mu e a >u#56o !#8e4 3a4a o +e0u!#8eP
8de+ inter(e: 1x2r): Int = = e %at#h { ; #ase - %5er(n) => n > #ase ) %(a" 5) => inter(a) C inter(5) ? }

Pa4a e#8e# e4 o que e+8A a-o#8e-e# oP e+8amo+ !He# o que um o+ -a+o+ e+3e4a o+ 2 o -a+o em que e 2 o 8!3o Num/e49 que 4e-e/e um 3a4Vme84o que -Gamamo+ e #@ No8e que #6o 34e-!+amo+ e>!#!4 o 8!3o e #9 3o!+ o -om3!la o4 -o#+e0ue !#>e4!4 /a+ea o #a e>!#!56o o

-o#+84u8o4 e Num/e4@ Fe!8o !++o9 # e+8A !+3o#I"el #o -o#8e<8o o case a8ual@ Pa4a #o++o -a+o -om Num/e49 34e-!+amo+ a3e#a+ e"ol"e4 o "alo4 e #@ No +e0u# o -a+o9 e+8amo+ e+3e4a# o uma E<34 o 8!3o Sum9 que 4e-e/e o!+ 3a4Vme84o+ e que /a+ea o #o -o#+84u8o4 e>!#! o #a -la++e9 +a/emo+ que 2 o 8!3o E<34@ Ne++e -a+o e"ol"emo+ o inter e a +oma o ao inter e b@ Ma8-G 2 e>!#! a -omo uma >u#56o -omo qualque4 ou84a em S-ala9 3o48a#8o 3o e +e4 a84!/uI a a "a4!A"e!+9 +e4 e"ol"! a -omo 4e+ul8a o e +e4 3a++a a -omo 3a4Vme84o 3a4a ou84a+ >u#5=e+@ Po e:+e 8am/2m -4!a4 um /lo-o -omo o +e0u!#8eP
8{ #ase - %5er(n) => n #ase ) %(a" 5) => a C 5 }

e u+A:lo -omo uma >u#56o a#N#!ma@ De++a >o4ma +e4A -4!a o uma >u#56o ma8-G 3a4a 84a8a4 -om +eu+ -a+o+ e>!#! o+ #o /lo-o@ EOCEPTIONS
8tr( { = 2rintln ;} #at#h { > #ase n2e: - ll4ointer1x#e2tion => 2rint(n2e.&etDessa&e) ? #ase ioe: I,1x#e2tion => 2rint(ioe.&etDessa&e) @ #ase e: 1x#e2tion => 2rint(e.&etDessa&e) <}

ALRUNS EOEMPLOS DE SCALA Exemplo 1:


s#ala> de+ a = = C = a: Int

Aqu! e+8amo+ e>!#!# o uma >u#56o -om o #ome Y aY que #6o 4e-e/e 3a4Vme84o+9 e e"ol"e o 4e+ul8a o a +oma Y2 + 2Y@ A 3ala"4a 4e+84!8a return #6o 2 #e-e++A4!a9 o -om3!la o4 -o#+e0ue !#>e4!4 que a Ql8!ma e<34e++6o a >u#56o +e4A o "alo4 e"ol"! o@ Re3a4e 8am/2m que #6o 34e-!+amo+ e>!#!4 o tipo que a >u#56o e"ol"e9 o qual 8am/2m >o! !#>e4! o 3elo -om3!la o4@ Po48a#8o ao -o#84A4!o o que 3o++a 3a4e-e49 S-ala 2 uma l!#0ua0em 8!3a a em 8em3o e -om3!la56o9 3o48a#8o o +e0u!#8e 84e-Go #6o -om3!laP Exemplo 2:

Um ou84o -o#-e!8o e S-ala 2 a !>e4e#5a e#84e chamada por valor9 e chamada por nome@ Na -Gama a 3o4 "alo4 2 >e!8a a e"alua56o a e<34e++6o a++!m que o -7 !0o 2 e<e-u8a o9 Na -Gama a 3o4 #ome a e"alua56o a e<34e++6o o-o44e a3e#a+ qua# o o 4e+ul8a o a -Gama a +e4A u+a o@ chamada por valorP
s#ala> de+ loo2: Int = loo2 loo2: Int s#ala> de+ 2ri%eiro(x: Int" (: Int) = x 2ri%eiro: (x: Int"(: Int)Int

chamada por nome: s#ala> de+ 2ri%eiro (x: Int" (: => Int) = x 2ri%eiro: (x: Int"(: => Int)Int E// O que definimos agora foi que o segundo parmetro de primeiro ser uma funo que devolve um nt! "ssim seu resultado s# ser obtido quando for feita a chamada direta na e$presso!

Exemplo 3: De>!#!56o e -la++e em +-ala


s#ala> #lass '# % la)o%a { var a# % lado = 97 de+ a# % la(i: Int) F = { a# % lado = a# % lado C i7 a# % lado } } de+ined #lass '# % la)o%a

bbO que >!Hemo+ >o! e>!#!4 uma -la++e que +e -Gama YA-umulaSomaY que 8em um a84!/u8o9 que bb3o4 3a 46o o S-ala 2 e a-e++o 34!"a o9 que +e -Gama a-umula o e que o -om3!la o4 bb!#>e4!u o 8!3o !#8e!4o /a+ea o #o "alo4 a84!/uI o@ Tam/2m e>!#!mo+ 3a4a a -la++e a >u#56o bbYa-umulaY que 4e-e/e um !#8e!4o9 0ua4 a o "alo4 a-umula o a82 e#86o a +oma -om o bb3a4Vme84o 3a++a o e e"ol"e 8al "alo4@ +-ala[ "al a- Z #eB A-umulaSoma bb !#+8a#-!a# o um o/;e8o
a#: '# % la)o%a = '# % la)o%aG#55e;< //criamos ac com a a palavra reservada val% ou seja% estamos //di&endo que diferente de var onde criamos uma varivel% estamos //criando um valor e estamos garantindo em tempo de compilao que //este valor no pode ser alterado no c#digo! //toda classe em 'cala tem por padro o construtor que no recebe parmetros com acesso p(blico! s#ala> a#.a# % la(=) res9: Int = = s#ala> a#.a# % la(8) res8: Int = ; //estamos invocando a funo acumula no objeto ac! )or*m acumula //* uma funo que recebe um (nico parmetro e devolve um valor! s#ala> o5je#t ,5jeto { de+ valor = ? } de+ined %od le ,5jeto s#ala> ,5jeto.valor res;: Int ?

bbC4!amo+ um Yo/;e-8Y !0ual -4!amo+ uma -la++e9 !#+8a#-!a4mo+ um o/;e-89 a>!#al e+8amo+ e>!#!# o 0a4a#8!# o em 8em3o e bb-om3!la56o que o e+!0# bb4e+84!#0!4 a e<!+8L#-!a e a3e#a+ uma e>!#!56o 3a4a Exemplo :

-om a !>e4e#5a e que bb#6o 2 3o++I"el o bb34734!o@ Com e++a !>e4e#5a9 e+8amo+ o -7 !0o9 em que >o! 8oma a a e-!+6o e e8e4m!#a a bb-la++e +e;a +e0u! a@

Em S-ala #6o e<!+8e o -o#-e!8o e "o! 9 8o a >u#56o e"ol"e um "alo4 e qua# o #6o GA um "alo4

e<3lI-!8o a +e4 e"ol"! o o -om3!la o4 +e e#-a44e0a e e"ol"e4 um "alo4 o 8!3o YU#!8Y@ E<em3loP
s#ala> de+ i%2ri%e = 2rint(:HelloI:) i%2ri%e: Jnit

Y34!#8\ 2 uma >u#56o que !m34!me um "alo4 #o 8e4m!#al e #6o e"ol"e "alo49 lo0o #o++a >u#56o Y!m34!meY 8am/2m #6o e"ol"e "alo49 3o48a#8o o 8!3o e"ol"! o 2 YU#!8Y9 que 8am/2m 3o e +e4 e<34e++a obe+-4!8o -omo Y.1Y@ A !>e4e#5a /A+!-a e#84e "o! e U#!89 2 que S-ala 3e4m!8e -4!a4 "alo4e+ e "a4!A"e!+ o 8!3o U#!89 e em Ja"a 3o4 e<em3lo #6o 2 3o++I"el -4!a4 uma "a4!A"el o 8!3o "o! @ Tam/2m 2 3o++I"el a#al!+a4 o "alo4 e"ol"! o 3o4 qualque4 >u#56o me+mo que a >u#56o #6o e"ol"a um "alo4 e>!#! o e #e+8e -a+o +e4A um U#!8P
s#ala> de+ n % = B n %: Int s#ala> de+ veri+i#aJnit(+: => 'n() = { + %at#h { #ase x:Jnit => 2rint(:1h JnitI:) F #ase _ => 2rint(:-ao eh JnitI:) } } veri+i#aJnit: (+: => 'n()Jnit

Exemplo !: Cal-ula a 4a!H qua 4a a a34o<!ma a e um #Qme4oP

s#ala> de+ a5s (x: !o 5le) = i+ (x > 9) x else -x a5s: (x: !o 5le)!o 5le ///estamos verificando se o n(mero elevado ao quadrado * pr#$imo o //bastante do original! s#ala> de+ 2roxi%a,) +i#iente(2al2ite: !o 5le" x: !o 5le) = F a5s((2al2ite K 2al2ite) - x) < 9.9998 2roxi%a,) +i#iente: (2al2ite: !o 5le"x: !o 5le)Loolean EE+ nMNo q e +aO o %elhor 2al2ite s#ala> de+ %elhora4al2ite(2al2ite: !o 5le" x: !o 5le) = F (2al2ite C x E 2al2ite) E = %elhora4al2ite: (2al2ite: !o 5le"x: !o 5le)!o 5le //O que foi feito foi pegar um n(mero para palpite que est entre o //nosso palpite anterior e $ dividido sobre o palpite anterior% onde $ //* o n(mero que queremos obter a rai& quadrada! O m*todo de +ewton //garante que para $ ,- . essa apro$imao * sempre vlida!

s#ala> de+ raiO-e*ton(2al2ite: !o 5le" x: !o 5le): !o 5le = F i+ (2roxi%a,) +i#iente(2al2ite" x)) 2al2ite F else raiO-e*ton(%elhora4al2ite(2al2ite" x)" x) raiO-e*ton: (2al2ite: !o 5le"x: !o 5le)!o 5le // funo que e$ecuta o m*todo de +ewton s#ala> de+ raiOP adrada(x: !o 5le) = raiO-e*ton(8" x) raiOP adrada: (x: !o 5le)!o 5le //definio de valores

Exemplo ":

Cu44?!#0
s#ala> so%a1ntre0o%$(?" 8?" x => x) res8;: Int = 889 s#ala> so%a1ntre0o%$(89" =9" x => x)

res8>: Int = 8@?

Ne++e -a+o e+8amo+ 4e3e8!# o o 3a4Vme84o a >u#56o 3a4a am/a+ a+ -Gama a+9 e 8al"eH !4emo+ 3e4-e/e4 que !4emo+ 4e3e8!4 mu!8a+ ou84a+ "eHe+@ Pa4a !++o e<!+8e uma >u#-!o#al! a e em S-ala .#6o 2 e<-lu+!"o e S-ala1 que 3e4m!8e uma a/+84a56o ma!o4 +o/4e e++e -7 !0o@ Ao !#"2+ e e"ol"e4mo+ o 4e+ul8a o a o3e4a56o9 "amo+ e"ol"e4 uma >u#56o9 que ao e<e-u8a a -om o+ 3a4Vme84o+ que "o-L 34e-!+e #o mome#8o9 lGe L o 4e+ul8a o@ Pa4a !++o /a+8a !m3leme#8a4 a +e0u!#8e >u#56oP
s#ala> de+ so%a1ntre(+: Int => Int): (Int" Int) => Int = { Fde+ ret$ n#(a: Int" 5: Int): Int = F i+ (a > 5) 9 else +(a) C ret$ n#(aC8" 5)7 ret$ n# } so%a1ntre: (+: (Int) => Int)(Int" Int) => Int

Fu#56o +omaE#84e que 4e-e/e uma ou84a >u#56o -omo 3a4Vme84o que 4e-e/e um I#8 e e"ol"e ou84o I#89 e e+8amo+ !He# o que a >u#56o +omaE#84e e"ol"e ou84a >u#56o que 4e-e/e o!+ 3a4Vme84o+ o 8!3o I#8 e e"ol"e um I#8@ Na !m3leme#8a56o e +omaE#84e e+8amo+ e>!#!# o um >u#56o que +e4A e"ol"! a9 lem/4a# o que >u#5=e+ +6o eleme#8o+ e 34!me!4a -la++e em S-ala9 3o48a#8o 3o emo+ -4!A:lo+ e#84o e ou84a+ >u#5=e+9 e !m3leme#8a# o a >u#56o que +e4A e"ol"! a a me+ma ma#e!4a que #o++a >u#56o +omaE#84eComF@ A !>e4e#5a9 2 que a0o4a e+8amo+ >!<a# o a >u#56o > que 2 e<e-u8a a +o/4e o+ #Qme4o+ o !#8e4"alo@ Tal 82-#!-a 2 -Gama a e currying@ Pa4a a3l!-a4 #o++a #o"a >u#56o 3o emo+ e<e-u8a4 o +e0u!#8e 84e-Go e -7 !0oP
s#ala> de+ so%aId1ntre = so%a1ntre(x => x) so%aId1ntre: (Int" Int) => Int s#ala> so%aId1ntre(8" 89) res8?: Int = ?? s#ala> de+ so%aP adrado1ntre = so%a1ntre(x => x K x) so%aP adrado1ntre: (Int" Int) => Int s#ala> so%aP adrado1ntre(8" 89) res8@: Int = ;A?

Temo+ ua+ >u#5=e+ !>e4e#8e+ que 4e-e/em o !#8e4"alo e #Qme4o+ 3a4a +e4em e<e-u8a a+9 e a3l!-am a >u#56o e+3e-I>!-a e -a a uma9 +7 que e++a "eH +e a3a4e-e4 uma ou84a ma#e!4a e 84a8a4 o+ #Qme4o+ a#8e+ e +omA:lo+9 /a+8a e<e-u8a4 +omaE#84e 3a++a# o a #o"a o3e4a56o e a >u#56o #o"a ;A e+8a4A 34o#8a +em que 8e#Ga que +e e>!#!4 +em34e a #o"a o3e4a56o 3a4a e<e-u8a4 a +oma@ Po emo+ e<e-u8a4 a+ >u#5=e+ -om -u44?!#0 +em e>!#!4 uma ou84a >u#56o 3a4a
s#ala> so%a1ntre(x => x)(8" 89) res8<: Int = ?? s#ala> so%a1ntre(x => x K x)(8" 89) res8A: Int = ;A?

Exemplo #:
/istas
8 var l = List(8"= ";) = var l8 = > :: ? :: @ :: -il

; > ? @ < A B 89

var l= = l8 :: l7 var r8 = 8 ntil 89 var r= = 8 to 89 2rintln(l.to)trin&) 2rintln(l8.to)trin&) 2rintln(l=.to)trin&) 2rintln(r8.to)trin&) 2rintln(r=.to)trin&)

Po emo+ "e4 #a l!#Ga & a u8!l!Ha56o o >a-8o4? me8Go cL!+8d 3a4a uma !#+8V#-!a e L!+8a+@ Na l!#Ga (9 e+8amo+ u8!l!Ha# o o o3e4a o4 8am/2m -Gama o e c-o#+d 3a4a -o#-a8e#a4 !8e#+ #o !#I-!o e uma l!#Ga9 e+8e o3e4a o4 u8!l!Ha um a l!#0ua0em +-ala9 8o o+ o+ o3e4a o4e+ que -ome5am -om cPd +6o -o#+! e4a o+ o3e4a o4e+ o eleme#8o a !4e!8a9 e #6o o eleme#8o a e+que4 a -omo #o4malme#8e a-o#8e-e9 e+8e >o4ma9 o m28o o >o! !#!-!alme#8e -Gama o em cN!ld9 que 8am/2m 4e34e+e#8a uma l!+8a "aH!a9 e a3a48!4 a! o m28o o >o! -Gama o #a l!+8a -4!a a@ Na l!#Ga ,9 u8!l!Hamo+ o me+mo o3e4a o4 3a4a -4!a4 uma l!+8a ma!o49 a-o#8e-e a me+ma -o!+a que #a l!#Ga a#8e4!o49 ma+ #e+8e 3o#8o ;A 2 -la4o que e+8amo+ -o#-a8e#a# o ua+ l!+8a+@ Na+ l!#Ga+ D e e e+8amo+ u8!l!Ha# o o+ m28o o+ cu#8!ld e c8od a -la++e cI#8d 3a4a -4!a4 o!+ o/;e8o+ o 8!3o cRa#0ed9 -oloque! e+8e+ !#8e4"alo+ #e+8e e<em3lo 3o4 que ele+ -om3a48!Gam mu!8a+ a+ 34o34!e a e+ e L!+8 que que4o mo+84a4 ma!+ a !a#8e9 o m28o o u#8!l #6o !#-lu! o Ql8!mo eleme#8o #a l!+8a9 o m28o o 8o +!#@ A+ l!#Ga+ ) a &( !m34!mem o 4e+ul8a o #o -o#+ole qua# o e<e-u8amo+ o 34o04ama -omo um +-4!38 S-ala@ Exemplos $: %apas Ma3a+ em +-ala !>e4e#8e+ a+ l!+8a+ que +6o +em34e !mu8A"e!+9 3o em +e4 mu8A"e!+ ou !mu8A"e!+9 #o e<em3lo a/a!<o 3o emo+ "e4 a u8!l!Ha56o e um ma3a mu8A"el@
8 = ; > ? @ < import s#ala.#olle#tion.% ta5le.HashDa2 val treas reDa2 = new HashDa2[Int" )trin&] treas reDa2 C= 8 -> :.o to island.: treas reDa2 C= = -> :$ind 5i& Q on &ro nd.: treas reDa2 C= ; -> :!i&.: 2rintln(treas reDa2(=))

Po emo+ 8am/2m -4!a4 ma3a+ !mu8A"e!+9 u8!l!Ha# o a +!#8a<e +!m3l!>!-a a a l!#0ua0em -omo 3o emo+ "e4 #o e<em3lo a/a!<o@
val ro%an- %eral = Da2(8 -> :I:" = -> :II:" ; -> :III:" > -> :IR:" ? 8 -> :R:) = 2rintln(ro%an- %eral(>))

Ma3a+ 3o em +e4 /a+8a#8e Q8e!+ 8am/2m9 o -o#84u8o4 e um ma3a em +-ala 4e-e/e uma l!+8a e 8u3le+ e o!+ eleme#8o+ o e<em3lo a#8e4!o4 8am/2m 3o e +e4 e+-4!8o e++a >o4maP
val ro%an- %eral = Da2((8" :I:)" (=" :II:)" (;" :III:)" (>" :IR:)" 8 (?" :R:)) = 2rintln(ro%an- %eral(>))

CONCLUWES A 04a# e mo a a+ l!#0ua0e#+ >u#-!o#a!+ e+8A +u40!# o 3o4que a-4e !8a++e que ela+ +6o o >u8u4o 3a4a a 34o04ama56o -o#-o44e#8e e 3a4alela9 !0a:+e que +e o +eu 34o04ama >o! e+-4!8o em uma l!#0ua0em >u#-!o#al "o-L 8e4A 0a#Go o /e#e>I-!o a e<e-u56o -o#-o44e#8e +em 04a# e+ e+>o45o+9 /em9 e3o!+ e le4 al0u#+ o-ume#8o+ +o/4e e+-ala9 3e4-e/e que !++o #6o 2 "e4 a e@ L!#0ua0e#+ >u#-!o#a!+ -omo qualque4 ou84o 3a4a !0ma #e-e++!8am que o 34o04ama +e;a e+-4!8o e ma#e!4a que +eu e+!0# +e;a "ol8a o 3a4a e<e-u56o -o#-o44e#8e ou 3a4alela9 a !>e4e#5a 2 que a +!#8a<e e a+ >e44ame#8a+ !+3o#I"e!+ #a+ l!#0ua0e#+ >u#-!o#a!+ que >a-!l!8am 8al e+!0#@ E<!+8em al0uma+ 82-#!-a+ e 34o04ama56o que +u40!4am -om l!#0ua0e#+ >u#-!o#a!+9 -omo 3o4 e<em3lo Re-u4+6o em Cau a9 Ta!+ 82-#!-a+ >a-!l!8am a "! a o -om3!la o4 #o mome#8o em que >o4 3o++I"el +e4 >e!8a al0um 8!3o e o8!m!Ha56o@ Uma -om3a4a56o que lo0o +u40e #a -a/e5a o+ 34o04ama o4e+ 2P qual l!#0ua0em 2 melGo49 S-ala ou Ja"af A 4e+3o+8a 2 >A-!lg #e#Guma@ Ca a l!#0ua0em 8em um e+-o3o e 3a4a !0ma e a8ua56o !>e4e#8e9 #6o 8em -omo -om3a4a4 am/a+@ O que 8al"eH >a5a +e#8! o -om3a4a4 +e;am >a8o4e+ ma!+ >o4a o omI#!o a l!#0ua0em9 -omo 3o4 e<em3lo o 8ama#Go a -omu#! a e que u8!l!Ha e>e8!"ame#8e a l!#0ua0em9 o 8!3o e +u3o48e9 a o-ume#8a56o !+3o#I"el9 a+ 4e+84!5=e+ e u+o9 ma+ em 0e4al e3e# e o -a+o e u+o e+3e-I>!-o 3a4a o +eu 34o/lema9 e 34!#-!3alme#8e o 0o+8o o 34o04ama o4@

Você também pode gostar