å°ãåãç§ã¯çŸåšJVMã®äžã«ããå€ãã®èšèªã®1ã€ã§ããScalaã«èå³ãæã¡ãŸããã ããã«ã¯å€ãã®çç±ããããŸãããäž»ãªçç±ã¯ãcppã®ãããªèšèªã§äœæ¥ãããšãã®äžäŸ¿ãã®é«ãŸãç¶ããæãã§ãã ç§ã®ç®ã¯RubyãGroovyãPythonã«äº€äºã«ç®ãåããŸãããããããã¯ãã¹ãŠãç§ã®éåžžã®äœæ¥ã¿ã¹ã¯ã«ããŸãé©ããŠããªãããŒã«ã®å°è±¡ãæ®ããŸããïŒPythonã¯è¯ãã§ãããåä»ããããŠããªãèšèªã«ã¯ç¬èªã®å¶éããããŸãïŒã äžæ¹ãScalaã¯ããªãè¯ãèšèªã®ããã«èŠããŸããã ããã§ã®æ€çŽ¢ã§ã¯ããã«é¢ããèšäºãèŠã€ãããŸããã§ããïŒããã€ããããŸããããå ¥éã§ã¯ãªã軜床ã«çœ®ãããïŒãç§ã¯å°ããªã¬ãã¥ãŒãæžããŠå€§è¡ãšââå ±æããããšã«ããŸããã
ç¡æã®å芧äŒã«ãããèšèªã®å²åŠ
èšèªã®äœæè ãè¿œæ±ããäž»ãªç®æšã¯äœã§ããïŒ ç§ã®æ 床ã«ãããšïŒ
ãŸããäºææ§ã éçºè ã¯ãã¿ã¹ã¯ã®äžã§ãJavaèšèªãšã®äºææ§ãç¶æããããŸããŸãªã¿ã¹ã¯ã解決ããããã®
第äºã«ãäž»ã«ïŒãããå®å šã«ã¯ã»ã©é ãïŒJavaãšã¯ç°ãªãæ©èœçãªæ©èœãåããèšèªã®éäžçãªé£œåã
第äžã«ãããªããšã®ç§ãã¡ã®ä»äºã®åæ»åã å®éãScalaã³ã³ãã€ã©ãŒã¯ããã°ã©ããŒã1èªã§ç解ããç¹ã«ã©ã¯ãã§ã¯ãªãããšã説æããããã®ã³ãŒããæžãããã«ããããŸã§ã«ãã£ã³ã¹ããããŸããã§ããã
第4ã«ãã¢ãžã¥ãŒã«åãããççµåã®ãœãããŠã§ã¢ã³ã³ããŒãã³ãã®äœæããµããŒãããæ¢åã®ã³ã³ããŒãã³ãã®å¹ åºãé©å¿ãªãã·ã§ã³ãšçµã¿åãããããšãæšå¥šããŸãã ç®æšã¯ãå®å šã«å察ã§ãããšããããšã§ã¯ãªããåæã«éæããããã«ç¹å®ã®å°é£ãçã¿åºããŸãã ããŠãäœãèµ·ãããèŠãŠã¿ãŸãããã
5çªç®ã«ãããã¯äžŠè¡æ§ãµããŒãã§ãã æ®å¿µãªãããç§ã®æãšé ã¯ãã®é åã«å°éããŠããŸããã§ãããïŒãããŸã§ã®ãšããïŒããã®ç¹ã«éç¹ã眮ããŠããã¹ãŠã®èšèªãªãœãŒã¹ã«åžžã«åãçµãã§ããŸãã
èšèªå®éšã®ããã«ããããããæ°ã«å ¥ãã®IDEã«é©åãªãã©ã°ã€ã³ãé 眮ããŠãã ããã
ããã§ã¯ãèšèªèªäœãèŠãŠã¿ãŸããã...
äžè¬çãªèšèªã®ã¢ã€ãã¢ãæ§æã®äŸ
ããããæãéèŠãªã®ã¯ãããªããžã§ã¯ãã®çµ±äžã¢ãã«ãã§ãã ãã®çšèªã¯ãèè ã«ãã£ãŠæ¬¡ã®ããã«ãã³ãŒããããŸãããåå€ã¯ãªããžã§ã¯ãã§ãããåæäœã¯ã¡ãœããåŒã³åºãã§ããã ããã¯ãã¡ããããã¹ãŠããªããžã§ã¯ããã§ã¯ãããŸãããããšã³ãã£ãã£ã¯Javaã«æ¯ã¹ãŠæžå°ããŠããããšã³ãã£ãã£ãå°ãªãã»ã©å¯¿åœã¯çããªããŸã:)é©çšãããçšèªã§ã¯ãããã¯æ°åãšèšå·ãå ±éã®ããŒãã«ååšããäžå€ãªããžã§ã¯ãã«ãªãããã¹ãŠã®æäœãåç §ã»ãã³ãã£ã¯ã¹ãååŸããŸãã ããšãã°ã
5 + 5
ã³ãŒãã¯éåžžã«æå¹ã§ãããã¬ããŒãžã³ã¬ã¯ã¿ãŒãããã«æçš¿ããããŒãäžã«æ°ãããªããžã§ã¯ããçæããŸãïŒå®éãã³ã³ãã€ã©ãŒãã¢ã€ãã¢ã®æ·±ããç解ããäœãçæããªãããšãéãã«é¡ã£ãŠããŸã:)ïŒã
ãã®ãããªé«è²ŽãªçŽ¹ä»ã®åŸãå€å žçãªåé¡ã®è§£æ±ºçãèŠãããšãã§ããŸãã
object Main {
def main(args:Array[ String ]) :Unit = {
print( "Hello, " + args(0) + "!" )
}
}
ãã®äžã«ã¯æ¬¡ã®ãã®ããããŸãã
- åã ã®ãªããžã§ã¯ãã宣èšã§ããŸãã ããã«ã¯çããããšã¯äœããããŸãã;äŸãã°ãGroovyã§ãåæ§ã®å¯èœæ§ããããŸãã ãã®ãããªãªããžã§ã¯ãã¯ãJavaã§èšè¿°ãããSingeltonãã³ãã¬ãŒãã®å®è£ ãšåãããã«åäœããŸãã
- é¢æ°å®£èšã¯ç°åžžã«èŠããŸãããéåžžã«èªã¿ãããã§ãïŒ[ããŒã¯ãŒãdef] [åå]ïŒ[ãã©ã¡ãŒã¿ãŒãªã¹ã]ïŒïŒ[æ»ãå€ã®å] = [ã³ãŒããããã¯]ã
- æ å ±è² è·ãæããªãã¿ã€ãã¯ããŠãããã¿ã€ãã§ãã Cã©ã€ã¯ãªèšèªã®voidãšéåžžã«ãã䌌ãŠããŸãã
- é¢æ°ãã©ã¡ãŒã¿ãŒå®£èšïŒããã³å®éã«ã¯ããŒã«ã«å€æ°ãïŒã¯[åå]ïŒ[ã¿ã€ã]ã®ããã«ãªããŸãã
- åã®ãã©ã¡ãŒã¿ãŒåã«ã¯ãéåžžã®
<>
䜿çšããŸããããäžèŠæ°žç¶çã«é åã«å²ãåœãŠãããŸã[]
ã - é åã®èŠçŽ ïŒããçš®ã®ãããã€ïŒãåç §ããã«ã¯ãïŒïŒã䜿çšããŸãã
- è¿œå ã®ã€ã³ããŒããªãã§ãããã©ã«ãã§ã³ãŒãã§äœ¿çšã§ããããã€ãã®çµã¿èŸŒã¿é¢æ°ããããŸãã
ããã«ãå¥ã®çãäŸãèŠãŠã¿ãŸãããã
println( ( "Hello, " + args(0) + "!" ).toUpperCase )
println( "Hello, " + args(0) + "!" toUpperCase )
以äžã®ããã«ãæŒç®åã®äœ¿çš
.
絶察ã«å¿ èŠã§ã¯ãããŸããã èšèªã®æ§æã§ã¯ã代ããã«ã¹ããŒã¹ã䜿çšã§ããŸãïŒã¡ãœããåŒæ°ã¯ãã¡ãœããåã®çŽåŸã«è§ãã£ããã«ã³ããªãã§èšè¿°ããããšãã§ããŸãïŒã ãããŠãèŠãŠãããããã«ãããã¯éåžžã«æçšã§ããããšãããããŸããæåã®è¡ã«ã¯ãåªå 床ã®é«ãæŒç®åããã
.
æ¬åŒ§ã³ãŒããè©°ãŸãããŠäžèŠãªãã®ãæžãããã«ãªããŸãã2çªç®ã®æ¹æ³ã§ã¯ãããç°¡æœã§æ確ãªåœ¢åŒã§èšè¿°ããŸãã
éçºè ãžã®æ¯æŽãšããŠãScalaã¯ã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãããµããŒãããŠããŸãã ã€ãŸããã€ã³ã¿ãŒããªã¿ãŒãéå§ããŠãã³ãã³ãã1ã€ãã€å ¥åã§ããŸãã IDEã«çµã¿èŸŒãŸããã€ã³ã¿ãŒããªã¿ãŒã¯äœããã®çç±ã§å®æçã«æ©èœããããã®å¥ã®ããŒãžã§ã³ã¯Ubuntaãªããžããªã«ãããŸããä»ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãããŸãæ©èœããŠãããšæããŸãã幞ããªWindowsææè ã¯ãã€ãã®ããã«èŠããå¿ èŠããããŸã:)
$ scala
Welcome to Scala version 2.7.3final (Java HotSpot(TM) Server VM, Java 1.6.0_16).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
éåžžã«å°ããªäŸïŒ
scala> 1 to 10
res0: Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
ããã«ããã©ã¡ãŒã¿ãŒã䜿çšããã¡ãœããåŒã³åºãã®äŸã瀺ããŸãã 誰ãæšæž¬ããªãã£ãå Žåãã¯ã©ã¹
Int
1ã®ãªããžã§ã¯ãããåãã¿ã€ã10ã®ãã©ã¡ãŒã¿ãŒãæã€
to
ã¡ãœããã§åŒã³åºãããçµæã¯å€ã®ç¯å²ã«ãªããŸãã
å¥ã®é¢æ°ãäœæããŠã¿ãŸãããã 圌女ã«äžããããç¯å²å ã®æ°ã®åèšãæ°ããŠã¿ãŸãããïŒ
scala> def sum(a: Int, b: Int): Int = {
| var result = 0
| for (i <- a to b) result += i
| result
| }
sum: (Int,Int)Int
scala> sum(1, 5)
res3: Int = 15
ä»ã®3ã€ã®éèŠãªãã€ã³ããããã«è¡šç€ºãããŸãã
- varããŒã¯ãŒãã䜿çšããŠãããŒã«ã«å€æ°ã宣èšã§ããŸã
- ãããã¯ã®èšç®çµæã¯ããã®äžã®æåŸã®åŒã§ã
- èªç±ã«forã«ãŒãã䜿çšããŠãç¹å®ã®ç¯å²å ã®å€ã®èšç®ãå®è¡ã§ããŸãïŒå®éã«ã¯ãä»»æã®ã³ã³ãããŒãªããžã§ã¯ãã®ãªããžã§ã¯ãã«å¯ŸããŠïŒ
æ©èœæäœ
ããã§äœãã§ããŸããïŒ ã¯ããäœã§ã=ïŒé¢æ°ã¯ããã°ã©ã ã®æ¬æ Œçãªãªããžã§ã¯ãã§ãã ãªããžã§ã¯ãã®ããããã£ãšããŠä¿åãããã©ã¡ãŒã¿ãšæ»ãå€ãšããŠæž¡ããå®è¡æã«å®éã«äœæã§ããŸãã ãããã®ããããã£ã䜿çšãããšãç¬èªã®çš®é¡ã§åäœããããããé«éé¢æ°ãæ§ç¯ã§ããŸãã
説æã®ããã«ãåèšãèšç®ããå€å žçãªäŸãèããŠã¿ãŸãããã
scala> def sum(f: Int => Int, a: Int, b: Int): Int =
| if (a > b) 0 else f(a) + sum(f, a + 1, b) sum: ((Int) => Int,Int,Int)Int
ãã®äŸã§ã¯ãããªãã¿ã®ããã¹ãŠã®åæŒç®åãè¡šãsumé¢æ°ãå®çŸ©ãããŠããŸãã ãã©ã¡ãŒã¿ã«ã¯æ¬¡ã®æå³ããããŸãã
fã¯ãæŽæ°ãåèšã®éçããåèšã®èŠçŽ ã«å€æããé¢æ°ã§ãã ãã©ã¡ãŒã¿ãŒã®ã¿ã€ãã®å®£èšã«æ³šæããŠãã ããïŒèšå·
=>
ã¯ããã©ã¡ãŒã¿ãŒãé¢æ°ã§ããããšãæå³ããåãå ¥ããããå€ã®ã¿ã€ãã¯ãã®å·ŠåŽã®æ¬åŒ§å ã«ãªã¹ããããŸãïŒãã®äŸã®ããã«ãã©ã¡ãŒã¿ãŒã1ã€ãããªãå Žåã¯çç¥ã§ããŸãïŒãè¿ãããçµæã®ã¿ã€ãã¯å³åŽã«ãããŸãã
ããã¯ç°¡åã«åäœããŸãïŒç¯å²ã®äžéã§é¢æ°ã®å€ãèšç®ããããã1ããå°ããç¯å²ã§èšç®ããçµæãšå ç®ããŸãã
ãŸãããã®äŸã§ã¯ãèšèªã®å¥ã®æ©èœã衚瀺ãããŸã-å€ã®åŒã§ããå ŽåïŒã¡ãªã¿ã«ã以åã«äœ¿çšãããforãåŒã§ãããçµæã¯
Unit
åã§ãïŒã æ¡ä»¶ãçã®å Žåãçµæã¯æåã®ãªãã·ã§ã³ã«ãªããããã§ãªãå Žåã¯2çªç®ã®ãªãã·ã§ã³ã«ãªããŸãã
aãšbã¯åèšã®éçã§ãã
ã»ãã®2ã€ã®
id
é¢æ°ãš
square
é¢æ°ã¯ããããããã©ã¡ãŒã¿ãŒãšãã®æ£æ¹åœ¢ã«çãããªããŸãã
scala> def id(x: Int): Int = x
id: (Int)Int
scala> def square(x: Int): Int = x * x
square: (Int)Int
ããã§ãå¥ã®åæ çãªäœè«ãè¡ãå¿ èŠããããŸããScalaã®é¢æ°ã«ã¯å®£èšã¹ã¿ã€ã«ã®å®£èšããããŸãã çµæãåŸãæ¹æ³ã§ã¯ãªãããããäœã«çãããã説æããŠããŸãã ãã ããé¢æ°æ¬äœã§é次èšç®ãæŽçããå Žåãåé¡ã¯ãããŸãã-ãããã¯ããããŸãã
ããã§ãåã«æžããå 容ã掻çšã§ããŸãã
scala> sum(id, 1, 5)
res1: Int = 15
scala> sum(square, 1, 5)
res2: Int = 55
ããã§ããã®éšåã®ã¯ã©ã€ããã¯ã¹ãèµ·ãããŸã-é¢æ°ãååŸããŠå¥ã®é¢æ°ã«æž¡ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ãå¿åã¯ã©ã¹ãããªã²ãŒãã¯ãããŸããïŒããã«ãããŸã-å°ãã®å¹žãã
ããã§ã¯ãå ¥ãåé¢æ°ãšå¿åé¢æ°ã®äŸãæå³çã«æäŸãããã«ãªãŒåããŠããŸãã ãã®Scalaã¯ãã¹ãŠå®è¡ã§ããŸãããçãã¬ãã¥ãŒã«å«ããããšã¯ã§ããŸããã äžèšã®äŸã¯ãããã°ã©ãã³ã°ããŒã«ãšããŠã®é«éé¢æ°ã®éèŠæ§ããããŠæãéèŠãªããšãç解ããã«ã¯ååã ãšæããŸãã æåŸã«ãããã°ã©ãã³ã°ã«é¢ãããã°ãããæ¬ã®ãã®ç« ãèªãããšããå§ãããŸãã
ã¯ã©ã¹ã®ç¹åŸŽ
ç°¡åãªã¯ã©ã¹ã説æããŸãããã è€çŽ æ°ã«ããŸãã 次ã®ã³ãŒããäœæããŸãã
class Complex(r: Double, i: Double) {
def real = r
def image = i
def magnitude = Math .sqrt(r*r + i*i)
def angle = Math .atan2(i, r)
def + (that: Complex) = new Complex( this .real + that.real, this .image + that.image)
override def toString = real+ " + i*" +image+ " | " +magnitude+ "*e^(i*" +angle+ "))"
}
object Main {
def main(args:Array[ String ]) :Unit = {
val first = new Complex(1, 5)
val second = new Complex(2, 4)
val sum = first + second
println(first)
println(second)
println(sum)
}
}
ãŸããã¯ã©ã¹ã¯ããã€ãã®ãã©ã¡ãŒã¿ãŒã§å®£èšãããŸãã ç¶ç·šããæšæž¬ã§ããããã«ããããã¯ãªããžã§ã¯ãã®åç¶æéãéããŠå©çšå¯èœãªã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒã§ãã
第äºã«ãããã€ãã®ã¡ãœãããã¯ã©ã¹ã§å®£èšãããŠããŸã-ã»ã¬ã¯ã¿ãŒã 1ã€ã¯ãã«ã«ãè¡šçŸçšã§ããã1ã€ã¯æ¥µåº§æšçšã§ãã ã芧ã®ãšãããã©ã¡ããã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒã䜿çšããŠããŸãã
第äžã«ãå ç®æŒç®åãã¯ã©ã¹ã§å®£èšãããŠããŸãã éåžžã®ã¡ãœãããšããŠå®£èšããã
Complex
ãåãå ¥ããŠè¿ããŸãã
ãããŠæåŸã«ããã®ã¯ã©ã¹ã§ã¯ããã¹ãŠã®Javaããã°ã©ããŒã«ãªãã¿ã®ãã
toString
é¢æ°ã
toString
ãããšã¯ééããããŸããã Scalaã®ãªãŒããŒã©ã€ãã¡ãœããã¯ãåžžã«
override
ããŒã¯ãŒãã§æ瀺çã«æå®ããå¿ èŠãããããšã«æ³šæããããšãéèŠã§ãã
éåžžã«å€§ããªå®çšç䟡å€ã«ããããããããã®ã¯ã©ã¹ã«ã¯ããã€ãã®æ¬ ç¹ããããŸãã
- ãã®æ©èœã®ããã«äžåœã«å€§éã®ç»é¢ã¹ããŒã¹ãå¿ èŠã§ã
- èªåãèªåãšæ¯èŒããæ¹æ³ãããããªã
ããŠããã®çŸããèšèªã®å©ããåããŠæ¬ ç¹ãä¿®æ£ããŠã¿ãŸãããã
class Complex(val real: Double, val image: Double) extends Ordered[Complex] {
def magnitude = Math .sqrt(real*real + image*image)
def angle = Math .atan2(image, real)
def + (that: Complex) = new Complex( this .real + that.real, this .image + that.image)
def compare(that: Complex): Int = this .magnitude compare that.magnitude
override def toString = real+ " + i*" +image+ " | " +magnitude+ "*e^(i*" +angle+ "))"
}
object Main {
def main(args:Array[ String ]) :Unit = {
val first = new Complex(1, 5)
val second = new Complex(2, 4)
if (first > second )
println( "First greater" )
if (first < second )
println( "Second greater" )
if (first == second )
println( "They're equal" )
}
}
ããã§ãæ°æ©èœïŒ
- ã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒã«ã¯ããŒã¯ãŒãvalãããã察å¿ããã»ã¬ã¯ã¿ãŒã¯è¡šç€ºãããŸããã ã¯ãããã¹ãŠãæçœã§ããããã¯ãã³ã³ãã€ã©ãŒãã»ã¬ã¯ã¿ãŒãèªåçã«äœæããããã®èš±å¯ã§ãã
- ãªãã¿ã®ãªãã¯ã©ã¹ïŒãŸãã¯ãããç¹æ§ïŒããã®ç¶æ¿ãè¿œå ããŸããã ã¯ããåçŽã§ã¯ãããŸããããã¯ã©ã¹ã«ãã£ãŠãã©ã¡ãŒã¿ãŒåãããŠããŸãã ååã瀺ãããã«ãããã¯ç§ãã¡ã®æšæ¬ã®æ³šæã«åœ¹ç«ã€ã¯ãã§ãã
- ã¢ãžã¥ãŒã«ãæ¯èŒããŠ2ã€ã®è€çŽ æ°ãæ¯èŒããæ¯èŒã¡ãœãããç»å ŽããŸããã
- the>ã<ã==æŒç®åã®äœ¿çšã¯ããã¹ãã¡ãœããã«çŸããŸããã æããã«ããããå®çŸ©ããŸããã§ããã
ç¹æ§ã®ã¢ã€ãã¢ã«ã€ããŠããã€ãã®èšèãèšãæãæ¥ãŸããã ããã¯ç¹å¥ãªã¿ã€ãã®ã¯ã©ã¹ã§ãããã³ã³ã¹ãã©ã¯ã¿ãŒãæã€ããšã¯ã§ããŸããããã¡ãœãããšå±æ§ãæã€ããšãã§ããŸãã éåžžã圌ãã¯åœŒãã®å¯èœãªçžç¶äººãšã®çžäºäœçšã®ããã®äœããã®ãããã³ã«ã確ç«ããŸãã ãã®ãããã³ã«ã䜿çšããŠãåå«ããå¿ èŠãªæ å ±ãååŸããããã«äœããã®åäœãå®è£ ã§ããŸãã ãããã£ãŠãä»»æã®ã¯ã©ã¹ïŒãŸãã¯ãªããžã§ã¯ãïŒãä»»æã®æ°ã®ç¹æ§ïŒããã³1ã€ã®ã¯ã©ã¹ã®ã¿ïŒããç¶æ¿ã§ããŸãã ããšãã°ã
Ordered
ã¯æœè±¡ã¡ãœããã宣èšãã
compare
ããã«åºã¥ããŠç¶æ¿ã¯ã©ã¹ãæŒç®å<ã<=ã>ãªã©ã§è£å®ããŸãã ããã§ã¯ãç°ãªããªããžã§ã¯ãã®çå®ãæäŸããhashCodeã䜿çšããequalsã¡ãœããããã®ãããªå Žåã«åå®çŸ©ããå¿ èŠããããããæäŸããã==æŒç®åãåå®çŸ©ãã䟡å€ãããããšã«æ³šæããŠãã ããã
ãããã¯ãã¹ãŠè¯ãããšã§ãããšã¢ãŠããœãŒã·ã³ã°åžå Žã®çµéšè±å¯ãªãã¡ã€ã¿ãŒã¯ãããããããã³ã»ã³ã¹ãªå±æ§ä¿®é£Ÿåã䜿çšããŠãéåžžã®ãã¡ã€ã³ã¯ã©ã¹ãå¿ èŠãªå Žåã¯ã©ããªããŸããïŒã
åœç¶ã解決çããããŸã:)
class User {
private [ this ] var _name: String = ""
def name = _name toUpperCase
def name_=(name: String ) = {
_name = if (name != null ) name else ""
}
}
- ãŸãããã®ã¯ã©ã¹ã¯ãç°æ§ãªä¿®é£Ÿå
private[this]
ã ãã§ãªããæ¬äœã§æ¢ã«ããªãã¿ã®ããŒã¯ãŒãvar
䜿çšããŸãã ã¯ã©ã¹æ¬äœã®ãã®ããŒã¯ãŒãã®å€ã¯ããããã¯ã®å éšã®å€ãšãŸã£ããåãã§ããïŒããã«ãç§å¯ãæããŠãããŸããã³ã³ã¹ãã©ã¯ã¿ãŒã«è©°ã蟌ãããšãã§ããŸãïŒãã¯ã©ã¹å±æ§ãå¯å€ã«ããŸãã outlandish修食åã¯ãå€æ°ã¯ãã®ãªããžã§ã¯ãããã®ã¿ã¢ã¯ã»ã¹å¯èœã§ããã¹ãã ãšè¿°ã¹ãŠããŸãã ããšãã°ãprivate[User]
ãèšè¿°ããŠãç§ãã¡ã®ãããªä»ã®ãªããžã§ã¯ãã§å©çšã§ããããã«ããããããã±ãŒãžã®ååãæå®ãããããããšãã§ããŸãïŒ äœããæãåºãããŸãïŒã - 次ã«ããã£ãŒã«ãã倧æåã§è¿ãé¢æ°ã宣èšãããŸãã
-
name_=
ã«ãå¥åŠãªé¢æ°name_=
ã¯ãæååããã©ã¡ãŒã¿ãŒãšããŠåãåãããããnull
ãªãããšã確èªããŠããã£ãŒã«ãã«æžã蟌ã¿ãŸãã
ããããã¹ãŠäœ¿çšããæ¹æ³ãç解ããããã«ã次ã®ã³ãŒãã®çµæãèŠãŠã¿ãŸãããïŒç°¡æœã«ãããããããã§ã¯ãªããžã§ã¯ããšã¡ã€ã³ã¡ãœããã®èª¬æã¯å«ããŸããã§ããïŒã
val user = new User( "Scala!!!" )
println(user.name)
user.name = "M. Odersky"
println(user.name)
SCALA!!!
M. ODERSKY
泚æãçµè«ïŒ<object>æ§é ã䜿çšãããšã<something> _ =ãšããååã®ã¡ãœãããåŒã³åºãããŸãã ç§ãScalaã§ç¥ã£ãŠããéããããã¯2çªç®ã®ããã¯ã§ãïŒæåã®ããã¯ã¯
()
ã
apply
ã¡ãœããã®åŒã³åºãã«å€æã
apply
ïŒ
ãã¿ãŒã³ãããã³ã°
ããªãã¯é ãããå°ãå§ããªããã°ãªããŸããã Scalaã«ã¯ãããããã±ãŒã¹ã¯ã©ã¹ããããŸãïŒåœç¶ããªããžã§ã¯ããïŒã ãããã¯ããŒã¯ãŒã
case
ã§å®£èšããããã®åŸã³ã³ãã€ã©ã¯æ¬¡ã®ããšãè¡ãèªç±ãåããŸãïŒ
- ã¯ã©ã¹ã«äžèŽããååã§ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãäœæããŸãã
- ã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ã«åºã¥ããŠãã¯ã©ã¹toStringãequalsãhashCodeã«å®è£ ããŸãã
- ãã¹ãŠã®ã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ã®ã»ã¬ã¯ã¿ãŒãäœæããŸãã
ãã®ãã¹ãŠã®éæ³ã¯ã
match
ã¡ãœããã䜿çšããããã®éãéããŸãã äŸãèŠãŠã¿ãŸãããïŒ
abstract class User
case class KnownUser(val name: String ) extends User
case class AnonymousUser() extends User
object Test {
val users = List (KnownUser( "Mark" ), AnonymousUser(), KnownUser( "Phil" ))
def register(user: User): Unit = user match {
case KnownUser(name) => println( "User " + name + " registered" )
case AnonymousUser() => println( "Anonymous user can't be registered" )
}
def main(args: Array[ String ]) =
users. foreach ( register )
}
ãããã£ãŠãã³ãŒãã®å šäœåã¯æ¬¡ã®ãšããã§ãããŠãŒã¶ãŒã®æœè±¡ã¯ã©ã¹ãããã圌ã®ã«ãžã¥ã¢ã«ãªåå«ã2ã€ãããŸããæåãªå¿åãŠãŒã¶ãŒã§ãã ïŒããã§ã¯ãã¡ã³ã¿ãžãŒãå«ãïŒäŒè°ã®ãŠãŒã¶ãŒã®ãªã¹ããç»é²ããŸãã ãã®ããã«ããã¿ãŒã³ãããã³ã°ã䜿çšããŸããããã«ãããããŸããŸãªçš®é¡ã®ãªããžã§ã¯ãã«å¯Ÿããã¡ãœããã®ããŸããŸãªåäœã決å®ãããããã®ãªããžã§ã¯ãããã®ããŒã¿ãµã³ããªã³ã°ãæäŸã§ããŸãã
ãã®ãããªå®äŸã®åŸã«ã
match
ã¡ãœããã®åäœã«é¢ããçè«ããããŸãã ã±ãŒã¹åŒããšã«ãåããã³ãã¬ãŒãã¯ã©ã¹ãšäžèŽãããã©ãããããã³ã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒããã³ãã¬ãŒããšäžèŽãããã©ããã確èªããŸãã äžè¬çãªå Žåã®ãã³ãã¬ãŒãã«ã¯ã次ã®ãã®ãå«ãŸããŸãã
- ä»ã®ã±ãŒã¹ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã ããã§ã¯ãã¹ãŠãéåžžã«ååž°çã§ããããã³ãã¬ãŒãã®ãã¹ãã®æ·±ãã¯
ããã°ã©ããŒã®çæ°ã«ãã£ãŠå¶éãããŸããã - ãã³ãã¬ãŒãå€æ°ã ãããã¯ãçµæãèšç®ããããã«é¢æ°ã®æ¬äœã§å©çšå¯èœã«ãªããŸãã
- ã·ã³ãã«
_
èå³ã®ãªãæå³ã瀺ããŸãã - èšèªãªãã©ã«ã ããšãã°ã
1
ãŸãã¯"Hello"
ã§ãã
ãããã£ãŠãæ§é ïŒã¯ã©ã¹ïŒããã³/ãŸãã¯æ ŒçŽãããããŒã¿ã«åºã¥ããŠãªããžã§ã¯ãããç¹å®ã®å€ãååŸããæ¹æ³ã説æã§ããããŒã«ãååŸããŸãã
OOPã®åºæ¬ååã«ç²ŸéããŠãã人ã¯ãåœç¶ããã®åé¡ãä»®æ³é¢æ°ã䜿çšããããšã§å®å šã«è§£æ±ºãããããšã«ããã«æ°ä»ãã§ãããïŒããã«ãææ¡ãããã¢ãããŒãã¯ãã¹ããã©ã¯ãã£ã¹ã§ã¯ãããŸããïŒã ãã ãããã®äœ¿çšã«ã¯2ã€ã®å°é£ã䌎ããŸãããŸããå€æ°ã®ãã®ãããªé¢æ°ã䜿çšããã³ãŒãã®ãµããŒããè€éã«ãªããŸãïŒçµå±ãã€ãã³ããã°ã«ãŒããããã°ãªã©ã§ãŠãŒã¶ãŒãç»é²ããããããã®å Žåã«ä»®æ³ã¡ãœãããäœæããŸãïŒ ïŒïŒã第äºã«ãåãã¿ã€ãã®ãªããžã§ã¯ãã¯åºæ¬çã«ç°ãªãæ§é ãæã€ããšãã§ããããŒã¿ãæäŸã§ããªããšããäºå®ã«é¢ããåé¡ã解決ããŸããã
2çªç®ã®åé¡ã«ç¹ã«æ³šæãæããããšæããŸãã äžèšã®ã³ãŒãã¯Javaã§ã¯ã©ã®ããã«ãªããŸããïŒ 1ã€ã®ã¯ã©ã¹ãå¿åãŠãŒã¶ãŒã
null
èšå®ããæ¯åãã§ãã¯ããå ŽåïŒç§ã®ãããªéº»é è¬ã¯isAnonymousã®ãããªã¡ãœãããéå§ããŸããããã¯ããã£ãŒã«ããåã
null
ãšæ¯èŒããããšã§æ§æãã
null
ïŒã åé¡ã¯æçœã§ã-æé»çã§å®å šã§ã¯ãããŸããã ãªããžã§ã¯ãã®æ§é ã®ããŸããŸãªããªãšãŒã·ã§ã³ã1ã€ã®ã¯ã©ã¹ã«çµåãããç¹å®ã®ã±ãŒã¹ã§äœ¿çšãããŠããªããã®ãnullã§è©°ãŸã£ãŠããå Žåãããã«æªãããšã«ããã©ã«ãå€ãçºæãããå Žåããã®ãããªäŸã¯éåžžã«å€ããããŸãã Scalaã§ã¯ããªããžã§ã¯ãã®æ§é ã®ããªãšãŒã·ã§ã³ãæ瀺çã«èšè¿°ããããšãã§ãããããã®ããªãšãŒã·ã§ã³ãæäœããããã®äŸ¿å©ãªã¡ã«ããºã ãæäŸãããŸãã
çµè«ãšããŠããã®ææ³ãä»®æ³æ©èœã®ä»£æ¿ãšããŠå¹æçã«é©çšã§ããææã«ã€ããŠã®ããã€ãã®èãïŒ
- å€ãã®æ©èœããããŸãã ã¯ãããªããžã§ã¯ãã®æ§é ãšå 容ã«å¿ããŠãæ°å䜿çšãããæ°çŸã®æäœãããå Žåãã±ãŒã¹ã¯ã©ã¹ã«åºã¥ããã·ã¹ãã -ãã¿ãŒã³ãããã³ã°ãæããã«ãããããµããŒããããŸãã
- ã¯ã©ã¹ã¯ã»ãšãã©ãããŸããã äžå¯Ÿã®ãªãã·ã§ã³ããã®äžèŽã¯åžžã«ããèªãŸããŸãã
- ãªããžã§ã¯ãã®æ§é ã«ã¯å€§ããªéãããããŸããããããã¯çµ±äžãããæ¹æ³ã§ä¿åããã³åŠçããå¿ èŠããããŸãã
éã¯ãã¹ãŠã®ãã€ã³ãã«åœãŠã¯ãŸããŸããããšãã°ã12åã®ã¯ã©ã¹ã«ãã¿ãŒã³ãããã³ã°ã䜿çšããã®ã¯è¯ãèãã§ã¯ãªãããã§ãã
åæšè«
æ¢ã«ãæ°ä»ãã ãšæããŸãããã³ãŒãã§ã¯ãã¯ã©ã¹ãšã¡ãœããã宣èšãããšãã«ã®ã¿åãæå®ããŠããŸãã ã³ãŒããããã¯ã§ã¯ãã»ãšãã©åžžã«ããããçç¥ããŸããã å®éãããã°ã©ããŒãæ瀺çã«åãæå®ããªãå ŽåãScalaã¯ã³ã³ããã¹ãããåã決å®ããããšããŸãã ããšãã°ã
def s = "Scala"
å®çŸ©ã§å®æ°å€ãåæåãããšã
def s = "Scala"
ã³ã³ãã€ã©ã¯å®æ°ã®ã¿ã€ããæååãšããŠæ±ºå®ããŸãã ããã¯ãã¹ãŠããžã§ããªãã¯åã§ãæ©èœããŸããããšãã°ãäžèšã®
val users = List(KnownUser("Mark"), AnonymousUser(), KnownUser("Phil"))
ã¯ãã¿ã€ã
List[User]
å®æ°ãäœæããèªåçã«éå±€ã®é©åãªã¬ãã«ã«äžãããŸãç¶æ¿ããããã䜿çšããŠã³ã³ããã¿ã€ãããã©ã¡ãŒã¿åããŸãã å®éã«ã¯ãããã¯ããã®ãããªåºåãå€§å¹ ã«ç¯çŽã§ããããšãæå³ããŸãïŒæ¥œãã¿ã®ããã«ãJavaãŸãã¯CïŒã§åãã³ãŒããèšè¿°ããŠãã ãã:)ïŒã
ãããã«
ããŒã...æçš¿ã®éå§ãŸã§ã«ãé·ãéã¹ã¯ããŒã«ããŸãã æããã«ããã¯çµäºããæéã§ãã ãããŠãç§ã¯ãã£ãšå€ãã®ããšãèšãããïŒäžè¬åãããã¯ã©ã¹ãèšè¿°ããããã®æãèå³æ·±ãã¡ã«ããºã ã«ã€ããŠãæé»ã®å€æã«ã€ããŠããããŠããããå®éã«æ瀺çã§ãå®æ°ã®é 延åæåã§ãããšããäºå®ã«ã€ããŠã
ç§èªèº«ã¯ããã«ãã¹ã¬ããã¢ãã«ãšãã®å®è£ ã«ç¹æã®äžé£ã®ããªããã£ãããŸã 調æ»ããŠããããxmlèšèªãµããŒããæ±ããDSLæ§é ãæäœããäž»åãããžã§ã¯ãã§ããLiftãèŠãŠ...
ãã ããããã€ãã®çµè«ãç«ãŠãããšãæ¢ããŠããŸãã
- Scalaã¯éåžžã«ç°¡æœã§è¡šçŸåè±ããªèšèªã§ã
- ã·ã³ãã«ã§çŸããããã°ã©ã ãäœæããããã®åŒ·åãªããŒã«ãæäŸããŸãã
以äžã§ãã æ¹å€ã¯å€§æè¿ã§ãã
æåŸã«ã倧è¡ãžã®è³ªåïŒãã®ãããã¯ã¯èå³æ·±ãã§ãããç¶ç·šãæžã䟡å€ããããŸããïŒ
UPDïŒãããæäŒã£ãŠãããã¿ããªã«æè¬ããŠãææ³ãä¿®æ£ããŸããã ç¹ã«ã倧èŠæš¡ãªã³ã³ãçšã®ganqqwerty ã
_________
ãœãŒã¹ã³ãŒããã€ã©ã€ã¿ãŒã§ãã¹ãŠã®ãœãŒã¹ã³ãŒãã匷調衚瀺ãããŸããã
ããã¹ãã¯Habraã§æºåãããŸã