Scala的控制結構

一、 if else表達式

scala中沒有三目運算符,因為根本不需要。scala中if else表達式是有返回值的,如果if或者else返回的類型不一樣,就返回Any類型(所有類型的公共超類型)。
例如:if else返回類型一樣

scala> val a3 = 10| val a4 =|   if(a3 > 20){|     "a3大于20"|   }else{|     "a3小于20"|   }| println(a4)
a3小于20
val a3: Int = 10
val a4: String = a3小于20

例如:if else返回類型不一樣

scala> val a5 =|   if(a3 > 20){|     "a3大于20"|   }| println(a5)
()
val a5: Any = ()

如果缺少一個判斷,什么都沒有返回,但是Scala認為任何表達式都會有值,對于空值,使用Unit類,寫做(),叫做無用占位符,相當于java中的void。

注意:行尾的位置不需要分號,只要能夠從上下文判斷出語句的終止即可。但是如果在單行中寫多個語句,則需要分號分割。在Scala中,{}快包含一系列表達式,其結果也是一個表達式。塊中最后一個表達式的值就是塊的值。

二、while表達式

Scala提供和Java一樣的while和do循環,與If語句不同,While語句本身沒有值,即整個While語句的結果是Unit類型的()。

  1. while循環
scala> var n = 1;| val while1 = while(n <= 10){|   n += 1| }| println(while1)| println(n)
()
11
var n: Int = 11
val while1: Unit = ()
  1. while循環的中斷
scala> import scala.util.control.Breaks| val loop = new Breaks| loop.breakable{|   while(n <= 20){|     n += 1;|     if(n == 18){|       loop.break()|     }|   }| }| println(n)
18
import scala.util.control.Breaks
val loop: scala.util.control.Breaks = scala.util.control.Breaks@6ce9771c

注意:scala并沒有提供break和continue語句來退出循環,如果需要break,可以通過幾種方法來做1、使用Boolean型的控制變量 2、使用嵌套函數,從函數中return 3、使用Breaks對象的break方法。

三、 for表達式

Scala 也為for 循環這一常見的控制結構提供了非常多的特性,這些for 循環的特性被稱為for 推導式(for comprehension)或for 表達式(for expression)。

1) for示例1:to左右兩邊為前閉后閉的訪問
scala> for(i <- 1 to 3; j <- 1 to 3){|   print(i * j + " ")| }| println()
1 2 3 2 4 6 3 6 9 
2) for示例2:until左右兩邊為前閉后開的訪問
scala> for(i <- 1 until 3; j <- 1 until 3) {|   print(i * j + " ")| }| println()
1 2 2 4 
3) for示例3:引入保護式(也稱條件判斷式)該語句只打印1 3。保護式滿足為true則進入循環內部,滿足為false則跳過,類似于continue
scala> for(i <- 1 to 3 if i != 2) {|   print(i + " ")| }| println()
1 3 
4) for示例4:引入變量
scala> for(i <- 1 to 3; j = 4 - i) {|   print(j + " ")| }| println()
3 2 1 
5) for示例5:將遍歷過程中處理的結果返回到一個,使用yield關鍵字
scala> val for5 = for(i <- 1 to 10) yield i| println(for5)
Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val for5: IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
6) for示例6:使用花括號{}代替小括號()
scala> for{|   i <- 1 to 3|   j = 4 - i}|   print(i * j + " ")| println()
3 4 3 

注意:{}和()對于for表達式來說都可以。for 推導式有一個不成文的約定:當for 推導式僅包含單一表達式時使用原括號,當其包含多個表達式時使用大括號。值得注意的是,使用原括號時,早前版本的Scala 要求表達式之間必須使用分號。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535665.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535665.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535665.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset資源清單文件編寫技巧2.1、查看定義Statefulset資源需要的字段2.2、查看statefulset.spec字段如何定義2.3、查看statefulset的spec.template字段如何定義 三、Statefulset使用案例&#xff1a;部署web站點3.1、編寫一個Statefulset資…

Scala 函數

scala定義函數的標準格式為&#xff1a; def 函數名(參數名1: 參數類型1, 參數名2: 參數類型2) : 返回類型 {函數體} 函數示例1&#xff1a;返回Unit類型的函數 def shout1(content: String) : Unit {println(content) }函數示例2&#xff1a;返回Unit類型的函數&#xff0…

ubuntu7.10中的apache的一些設置

在/etc/apache2/mods-available目錄下是apache2可用的模塊.出現在這里的模塊不代表你可以用.只是表明你的apache2已經安裝了這些模塊.可用的模塊在/etc/apache2/mods-enabled這個目錄下.(從redhat系列轉過來看ubuntu,雖然感覺不習慣,但覺得ubuntu的這種分目錄的方法很不錯.) 如…

Java并發篇_Java內存模型

在并發編程中&#xff0c;我們通常會遇到以下三個問題&#xff1a;原子性問題&#xff0c;可見性問題&#xff0c;有序性問題。那么它們產生的原因和在Java中解決的辦法又是什么呢&#xff1f; 一、內存模型的相關概念 ? 計算機在執行程序時&#xff0c;每條指令都是在CPU中執…

rz的安裝

以前,在redhat系列的linux中,通過終端工具操作服務器,經常使用rz來上傳小文件.但是有些系統默認情況下不能使用此命令.今天通過ubuntu.看到這條命令.即使ubunt沒有裝這個命令,你輸入此命令時,它會提示你進行安裝. rootubuntu:~# rzThe program rz is currently not installed. …

Java并發篇_synchronized

synchronized是Java語言的關鍵字&#xff0c;當它用來修飾一個方法或者一個代碼塊的時候&#xff0c;能夠保證在同一時刻最多只有一個線程執行該段代碼。本文給大家介紹java中的用法。 一、為什么要使用synchronized 在并發編程中存在線程安全問題&#xff0c;主要原因有&…

mysqlreport的學習

mysqlreport是一個腳本. 需要先安裝perl-DBI和perl-DBD-MySQL這2個包 mysqlreport 使用DBI 需要有http://hackmysql.com/mysqlreportdocperl ./mysqlreport --help 看幫助 perl ./mysqlreport --user root --password 密碼mysqlreport 文檔mysqlreport 以很友好的方式顯示 My…

Java并發篇_volatile

volatile是Java提供的一種輕量級的同步機制。Java 語言包含兩種內在的同步機制&#xff1a;同步塊&#xff08;或方法&#xff09;和 volatile 變量&#xff0c;相比于synchronized&#xff08;synchronized通常稱為重量級鎖&#xff09;&#xff0c;volatile更輕量級&#xff…

vi 語法著色

我所在部門的經理極其鄙視我用vi,這到不是說他看不慣vi,而是因為那句話"只有黑客級的人才用VI".而我只是一只小小萊鳥.所以只好被他們鄙視了. 現在說一說vi 著色的問題. 首先安裝 vim-enhanced &#xff0c; # yum -y install vim-enhanced 然后&#xff0c; # vi ~/…

Docker Dockerfile詳解

一、什么是Dockerfile Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Doc…

公司臺灣主站的url重寫

今天對公司臺灣主站的url地址進行優化.主站采用的是joomla,而joomla初建好后用的url對搜索引擎非常的不友好. Joomla中的SEF說白了就是一個對URL的重寫的過程將原來參數眾多&#xff0c;層次很深的URL改寫為一個簡單的更容易被記住被搜索的URL。通過分析Joomla站點的URL結果就…

編寫第一個Spring程序——IOC實現

第一個Spring程序 IOC范例 1、新建maven工程 2、在pom.xml文件中導入相關jar包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core&l…

改變centos系統的時區

兩條命令都可以: 1.timeconfig 2.tzselect

分布式文件系統:原理、問題與方法

本地文件系統如ext3&#xff0c;reiserfs等&#xff08;這里不討論基于內存的文件系統&#xff09;&#xff0c;它們管理本地的磁盤存儲資源、提供文件到存儲位置的映射&#xff0c;并抽象出一套文件訪問接口供用戶使用。但隨著互聯網企業的高速發展&#xff0c;這些企業對數據…

編寫第二個Spring程序——AOP實現

第二個Spring程序 AOP范例 1、新建maven工程 2、在pom.xml文件導入相關jar包 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core<…

linux高負載下徹底優化mysql數據庫

同時在線訪問量繼續增大 對于1G內存的服務器明顯感覺到吃力嚴重時甚至每天都會死機 或者時不時的服務器卡一下 這個問題曾經困擾了我半個多月MySQL使用是很具伸縮性的算法&#xff0c;因此你通常能用很少的內存運行或給MySQL更多的被存以得到更好的性能。 安裝好mysql后&#x…

Java注釋說明以及IDEA中的快捷鍵

一、單行注釋 說明&#xff1a;單行注釋 一般注釋少量的代碼或者說明內容 格式&#xff1a;//注釋的內容 IDEA中的快捷鍵&#xff1a;使用Ctrl /&#xff0c; 添加行注釋&#xff0c;再次使用&#xff0c;去掉行注釋 二、多行注釋 說明&#xff1a;多行注釋 一般注釋大量的…

redhat系統雙網卡綁定

Redhat Linux的網絡配置&#xff0c;基本上是通過修改幾個配置文件來實現的&#xff0c;雖然也可以用ifconfig來設置IP&#xff0c;用route來配置默認網關&#xff0c;用hostname來配置主機名&#xff0c;但是重啟后會丟失。 1.相關的配置文件: /ect/hosts 配置主機名和IP地址…

JDK源碼解析之java.util.Iterator和java.lang.Iterable

在Java中&#xff0c;我們可以對List集合進行如下幾種方式的遍歷&#xff1a;第一種就是普通的for循環&#xff0c;第二種為迭代器遍歷&#xff0c;第三種是for each循環。后面兩種方式涉及到Java中的iterator和iterable對象&#xff0c;接下來我們通過源碼來看看這兩個對象的區…

為了讓你的網頁能在更多的服務器上正常地顯示,還是加上“SET NAMES UTF8”吧

Repinted:http://blog.csdn.net/class1/archive/2006/12/30/1469298.aspx 為了讓你的網頁能在更多的服務器上正常地顯示&#xff0c;還是加上“SET NAMES UTF8”吧(可以根據你的喜歡選擇相應的編碼,如gb2312)&#xff0c;即使你現在沒有加上這句也能正常訪問。 先說MySQL的字…