例如,在Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。在Scala中,成员变量/属性必须显示初始化,而在Java中可以不初始化。...而 Null 类型是所有引用类型的子类型,它只有一个实例:null。 语法 主方法是一个程序的入口点。JVM要求一个名为main的主方法,接受一个字符串数组的参数。你可以如下所示来定义一个主方法。...Scala 具有丰富的运算符,并且允许用户自定义运算符,以及在自定义类中使用运算符。下面是关于定义和使用运算符的解释和示例代码: 在 Scala 中,可以使用 def 关键字定义自定义运算符。...传名参数使用 => 符号来定义,以表示传递的是一个表达式而不是具体的值。 传名参数的特点是,在每次使用参数时都会重新求值表达式,而不是在调用函数时进行求值。...在字符串前加上 s 前缀,然后在字符串中使用 ${expression} 的形式来插入表达式的值。
创作时间:2022 年 6 月 27 日 博客主页: 点此进入博客主页 —— 新时代的农民工 —— 换一种思维逻辑去看待这个世界 ---- 文章目录 一、运算符 二、流程控制 if - else...for while 和 do......while 循环中断 ---- 一、运算符 Scala中的运算符和Java中的运算符基本相同。...Scala中的==更加类似于 Java 中的 equals,而eq()比较的是地址 逻辑运算 && || !...返回值可以为Unit类型,此时忽略最后一个表达式的值,得到() scala中没有三元条件运算符,可以用if (a) b else c 替代a ? b : c 嵌套分支特点相同。...break 和 continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。
例如,在Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。在Scala中,成员变量/属性必须显示初始化,而在Java中可以不初始化。...而 Null 类型是所有引用类型的子类型,它只有一个实例: null。语法主方法是一个程序的入口点。JVM要求一个名为main的主方法,接受一个字符串数组的参数。你可以如下所示来定义一个主方法。...Scala 具有丰富的运算符,并且允许用户自定义运算符,以及在自定义类中使用运算符。下面是关于定义和使用运算符的解释和示例代码: 在 Scala 中,可以使用 def 关键字定义自定义运算符。...传名参数使用 => 符号来定义,以表示传递的是一个表达式而不是具体的值。传名参数的特点是,在每次使用参数时都会重新求值表达式,而不是在调用函数时进行求值。...在字符串前加上 s 前缀,然后在字符串中使用 ${expression} 的形式来插入表达式的值。
等) 用反引号....包括的任意字符串,即使是Scala关键字(39个)也可以 4、关键字(39) package, import, class, object, trait, extends, with...运算符本质 在Scala中其实是没有运算符的,所有运算符都是方法。...当调用对象的方法时,点.可以省略。 如果函数参数只有一个,或者没有参数,()可以省略。...内置控制结构特地去掉了break和continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。...class ClassObjectTest { val name:String = "lisi" //用private修饰的只能在类或者伴生对象中使用 private val age
在 Scala 字符变量使用单引号 ' 来定义,字符串字面量使用双引号 " 来定义,多行字符串用三个双引号来表示分隔符,格式为:""" ... """。...用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。...因为它只允许保护成员在定义了该成员的的类的子类(继承)中被访问。而在java中,用 protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。...() 方法可以返回 String 对象而不是 PrintStream 对象。...ListScala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。
: //字符串变量用""包裹 scala> val helloWorld = "HelloWorld" helloWorld:String = HelloWorld //要定义"Hello World...运算符 scala> 3 <= -3 res14: Boolean = false //运算符 scala> 3 <=3 res15: Boolean = true //运算符 scala>...//Scala基于内容比较,而java中比较的是引用,进行内容比较时须定义比较方法 scala> x==y res36: Boolean = true Scala程序控制结构 1、if的使用: Scala...val x = if("hello" == "hell") 1 else 0 x:Int = 0 注意点: 1、Scala的表达式都有类型,比如上面的if/else,类型为Int,因为if和else...= j) print((10 * i +j) + " ") 12 13 21 23 31 32 可以使用任意多的定义,引入可以再循环中使用 for(i <- 1 to 3; from = 4 - i;
Scala 同样重用了许多标准 Java 库类型。例如,Scala 里的字符串文本是 Java.lang.String,而抛出的异常必须是 java.lang.Throwable 的子类。...+(",world") res18: String = hello,world scala> 也就是说 字符串的+运算实际上就是调用了+方法,运算符被重载了 to运算可以生成一个区间集合 2.4 分支语句...也就是链接表结构)而数组不是。。...这些_N数字是基于1的,而不是基于0的,因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。 2.10 Map Scala映射(Map)是一组键/值对的对象。...单例是一种只能有一个实例的对象。使用object关键字对象而不是class关键字创建单例。由于无法实例化单例对象,因此无法将参数传递给主构造函数。
示例属性 Graph 假设我们要构建一个由 GraphX 项目中的各种协作者组成的属性图。顶点属性可能包含用户名和职业。我们可以用描述协作者之间关系的字符串来注释边: ?...EdgeTriplet 类通过分别添加包含源和目标属性的 srcAttr 和 dstAttr 成员来扩展 Edge 类。 我们可以使用图形的三元组视图来渲染描述用户之间关系的字符串集合。...定义了优化实现的核心运算符,并定义了 Graph 表示为核心运算符组合的方便运算符 GraphOps 。不过,由于 Scala 的含义,操作员 GraphOps 可自动作为成员使用 Graph 。...重复的顶点被任意挑选,并且边缘 RDD 中找到的顶点,而不是顶点 RDD 被分配了默认属性。...无论是 leftJoin 和 innerJoin 能够连接两个时识别 VertexRDD 来自同一来源的小号 HashMap 和落实线性扫描,而不是昂贵的点查找的加入。
示例:class MyFirstScalaClass 方法名称 - 所有的方法名称的第一个字母用小写。 如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。...混合标志符由字符数字标志符后面跟着一个或多个符号组成,比如 unary_+ 为 Scala 对+方法的内部实现时的名称。字面量标志符为使用"定义的字符串,比如 x yield。.../* This is a multiline comment: */ 单行注释用//开头,并继续到行尾: // This is a single line comment 在Scala中,还可以嵌套多行注释...java.awt,所以可以省去前面的部分 } import语句可以出现在任何地方,而不是只能在文件顶部。...{HashMap => _, _} // 引入了util包的所有成员,但是HashMap被隐藏了
Java10 中的类型涂端: ? 公平的说,我需要补充一点,Kotlin在这个领域仍然略胜一筹。你也可以在其他上下文中使用类型推断,例如,单行方法。 更多关于Java10 中的局部变量类型推断。...在我看来,Kotlin的类型系统中所有这些类似scala的东西!,?和!!,实在是太复杂了。为什么Kotlin从Java的T类型推断到T!而不是T?呢?...我是面向对象的,而静态成员不是面向对象的,” Kotlin回答。 “好吧,但我需要用于 MyClass 日志记录器,该怎么办?” “没问题,可以使用伴生对象。” “伴生对象是什么鬼?”...“ “好麻烦的语法,”这个程序看起来有些疑惑,“不过还好,现在我可以像这样——MyClass.logger——调用日志记录了吗?就像在 Java 中使用静态成员那样?”...“嗯……是的,但是它不是静态成员!它只是一个对象。可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。”
请牢记,花括号只能用于初始化包含值的集合。如下图所示,使用不包含值的花括号是初始化字典(dict)的方法之一,而不是初始化集合的方法。 ?...需要注意的一点是,你只能将不可变的值(例如一个字符串或一个元组)加入到集合中。举例而言,如果你试图将一个列表(list)添加到集合中,系统会返回类型错误「TyprError」。...上面的代码与你之前学过的求差集类似,只是看上去有一点点不同。 成员检测 成员检测能够检查某个特定的元素是否被包含在一个序列中,例如字符串、列表、元组或集合。...在 Python 中使用集合的一个主要的优点是,它们在 Python 中为成员检测做了深度的优化。例如,对集合做成员检测比对列表做成员检测高效地多。...如果你是计算机科班出身,我们可以说,这是因为集合中成员检测的平均时间复杂度是 O(1)的而列表中则是 O(n)。
避免复杂的字符串格式化 Kotlin允许使用字符串模板来简化字符串格式化。$可以用来引用变量,复杂的表达式可以用 ${}。...同一个对象内的调用序列中,无需再重复类型名 Kotlin提供了with结构以方便反复调用同一个对象的方法,这样就无需每次都指明变量名。Java通常采用builder模式和方法链来实现这一点。...与Scala不同,Kotlin没有自己的集合库,它只是扩展了JDK的集合。因此在Java和Kotlin的集合类型之间转换无需使用胶水代码。...可以获得许多最佳实践: 所有类都是final; 集合是immutable的; 通过必须的关键字实现重载,而不是可选的注解; 没有必须处理的异常(checked exception); 没有原始(Raw)...如果是Java开发者,那么还应该考虑下其他因素,如团队成员、公司的接受程度等。但即使不能立即使用,也应该看看Kotlin这个现代语言的美。
可是 Scala 的数字类型并不都共享一个超类,所以我们不能使用T Scala 的 math 库对适当的类型 T 定义了一个隐含的 Numeric[T]。...然后在 List 定义中使用它: sum[B >: A](implicit num: Numeric[B]): B 如果你调用List(1,2).sum(),你并不需要传入一个 num 参数;它是隐式设置的...这时可以使用以下类型-关系运算符: A =:= B A 必须和 B 相等 A 的子类 A <%< B A 必须可以被看做是 B scala> class Container...types — 类型需求由接口构造表示,而不是由具体的类型表示。...def get = 10 }) res0: Int = 133 4.抽象类型成员 在特质中,你可以让类型成员保持抽象。
数据类型与操作符 scala中的类型以及操作符绝大多数和Java一样,我们主要来学习 与Java不一样的一些用法 scala类型的继承体系 数据类型 基础类型 类型说明 Byte 8位带符号整数 Short...NOTE] scala中所有的类型都使用大写字母开头 整形使用Int而不是Integer scala中定义变量可以不写类型,让scala编译器自动推断 运算符 类别 操作符 算术运算符 +、-、*、/、...位运算符 &、||、^、> Scala 中的运算符, 基本上和Java一样, 除了: scala中没有,++、--运算符 与Java不一样,在scala中,可以直接使用==、!...而比较两个对象的引用值,使用eq 示例 有一个字符串"abc",再创建第二个字符串,值为:在第一个字符串后拼接一个空字符串。 然后使用比较这两个字符串是否相等、再查看它们的引用值是否相等。...val b:Int = null scala会解释报错: Null类型并不能转换为Int类型,说明Null类型并不是Int类型的子类, 也就是不是数值类型AnyVal的子类
scala中的类型以及操作符绝大多数和java一样,通过本篇博客,我们将学习: 与Java不一样的一些用法 scala类型的继承体系 ---- 数据类型 基础类型 类型说明 Byte 8位带符号整数 Short...NOTE] 1.scala中所有的类型都使用大写字母开头 2.整形使用Int而不是Inteage 3.scala中定义变量可以不写类型,让scala编译器自动推断 ---- 运算符 类别 操作符 算术运算符...=、>=、<= 逻辑运算符 &&、||、! 位运算符 &、||、^、> [!NOTE] scala中没有,++、–运算符 与Java不一样,在scala中,可以直接使用==、!...而比较两个对象的引用值,使用eq 示例 有一个字符串"abc",再创建第二个字符串,值为:在第一个字符串后拼接一个空字符串。 然后使用比较这两个字符串是否相等、再查看它们的引用值是否相等。...val b:Int = null 结果 scala会解释报错: Null类型并不能转换为Int类型,说明Null类型并不是Int类型的子类 ---- 本篇博客到这里就结束了,感兴趣的小伙伴们可以持续关注哟
例如:inline fun foo(inlined: () -> Unit, noinline notInlined: () -> Unit) crossinline 当内联函数不是直接在函数体中使用lambda...虽然在Scala,Groovy这样的语言中,函数的返回值可以不需要显示用return来指定,但是我们仍然认为,使用return的编码风格更加容易阅读理解 (尤其是在分支流代码块中)。...这地方,相比Scala,写这样的Kotlin代码就显得不大友好),只能显式调用toString来相加: >>> 1.toString()+"" 1 自定义重载的 + 运算符 下面我们使用一个计数类 Counter...1:0,取而代之的是if(true) 1 else 0。而Elvis操作符算是精简版的三元运算符。...我们在Java中使用的三元运算符的语法,你通常要重复变量两次, 示例: String name = "Elvis Presley"; String displayName = (name !
领取专属 10元无门槛券
手把手带您无忧上云