package cn.dowhatyouwant.codes
/**
* Created by DengNi on 2016/8/31.
* Scala 是动态语言,静态类型,因为难,所以用起来方便
* spark 太优秀每个人都应该去学习,使用
* 学习spark 优先推荐scala python
* 基于jvm fp + oo
* 跟java 互操作
* interpreter ==scala shell
* val var
* var h :String ,赋值后scala 自动推断数据类型
* 函数
*
*/
object TestBegian {
// 函数
def hello(name:String):String ={ //定义一个函数,返回类型为string
"hello " + name //默认最后一行是return 值,所以不要加return
}
def helloScala(): Unit ={ //无参 函数前面的括号可以去掉
println("my name is xxxx")
}
def add=(x :Int,y:Int) => x + y //定义一个匿名函数 ,特别重要
def add2(x :Int)(y:Int) = x*y //柯里化
def printEveryChar(c : String*)={ //接受一系列string 类型的参数,就是可变参数
c.foreach(x=>println(x))
}
def xx(age:Int = 18)={ //调用时候如果不传入参数,就使用默认 参数 18
age
}
// main f
def main(args: Array[String]) {
//println("hello there")
// println(hello("scala"))
//helloScala //对于无参函数,在调用时候不需要括号,建议加上吧
//println(add(1,2))
//println(add2(2)(4))
//printEveryChar("a","b")
//printEveryChar("c","d","f")
//println(xx()) //只有无参函数才能去掉括号
//条件表达式 if,scala 默认是不需要分号
//val x =2
//val b = if(x >1 ) 1 else 0
//println(b)
//loop
//var (n,r) = (10,0)
//while(n > 0){
// r =r +n
// n = n -1
//}
//println(r)
//foreach
//for
//for ( i<-1 to 100){
// print(i)
// println()
//}
//for ( i<-1 until 10){ //不包含上线 10 ,这是跟to 的区别
// print(i)
// println()
//}
//for (i <- 1 to 100 if i%2 == 0){ //打印偶数 for 跟 if 表达式的合用
//println(i)
//}
//循环表达式没有 continue and break
//val p =new Person //没有构造函数的时候 类的括号可以省略
//p.name="hidoyouO"
//print(p.name+":" + p.age)
//val p = new Person("hijack",18) // new 变量的时候会打印 this is the primary constructor!
// println(p.age + p.name)
//val p = new Person("hijack",18,"f")
//println(p.gender+p.name)
val s = new Student("hijck",18,"Eng")//其实是初始化所有的方法和属性
println(s.toString)
}
}
class TestBegian{ //所有类默认是public 的
}
//class Person{
//var name :String = _ //此时 String 是不能去掉的
// var name :String = "hijack" //var 定义的变量系统会自动生成geter &setter 方法
//val age = 18 //val 定义的变量只会生成getter方法 ,符合我们的不能重新赋值的理念
//private[this] var gender ="122" //变量只能在Person 内使用,main 方法中的对象不能调用
//}
//1.主构造器,直接跟在类名后面,主构造器的参数最后会编译成类的字段
//2.主构造器执行的时候,会执行类中所有的语句
//3.假设参数声明时候不带var or val ,那么声明的变量相当于private【this】,只能在
//在类中使用, class Person ( name :String,val age : Int) 《= name
class Person (val name :String,val age : Int){
println("this is the primary constructor!")
var gender : String = _
//辅助构造器名称wei this
//每一个附属构造器必须首先调用已经存在的子构造器或是主构造器
def this(name : String,age : Int,gender : String){
this(name,age)
this.gender=gender
}
}
//继承
//name age 是继承来的 ,major 是student 类特有的,所以需要使用val 定义
class Student(name:String,age :Int,val major :String) extends Person(name, age){
println("this is the subclass of Person,major is " + major)
//重写父类的方法 和 字段 同时保持跟父类保持相同的数据类型
override def toString = "this from student"
}