4:kotlin 方法(Functions)

想要聲明一個函數需要使用fun關鍵字

fun hello() {return println("Hello, world!")
}fun main() {hello()// Hello, world!
}

格式:

fun 方法名(參數1: 參數1類型, 參數2 : 參數2類型, ...): 返回值類型 {方法體return 返回值
}fun 方法名(參數1: 參數1類型, 參數2 : 參數2類型, ...){方法體
}

參數可以有一個或者多個,也可以沒有參數。

舉例

fun sum(x: Int, y: Int): Int {return x + y
}fun main() {println(sum(1, 2))// 3
}
fun printMessageWithPrefix(message: String, prefix: String) {println("[$prefix] $message")
}fun main() {printMessageWithPrefix(prefix = "Log", message = "Hello")// [Log] Hello
}

建議使用小駝峰命名法

默認參數值

fun printMessageWithPrefix(message: String, prefix: String = "Info") {println("[$prefix] $message")
}fun main() {printMessageWithPrefix("Hello", "Log") // [Log] HelloprintMessageWithPrefix("Hello")        // [Info] HelloprintMessageWithPrefix(prefix = "Log", message = "Hello")// [Log] Hello
}

如果跳過某一個參數,若果有后續的參數,必須指定參數名字

單一表達式方法

fun sum(x: Int, y: Int): Int {return x + y
}
fun main() {println(sum(1, 2))// 3
}

對單表達式函數,可以進行一下簡化

  • 去除返回值類型
  • 去除return關鍵字
  • 去除{}
  • =連接方法體
fun sum(x: Int, y: Int) = x + yfun main() {println(sum(1, 2))// 3
}

Lambda 表達式

如下方法

fun uppercaseString(str: String): String {return str.uppercase()
}
fun main() {println(uppercaseString("hello"))// HELLO
}

可寫為

fun main() {println({ str: String -> str.uppercase() }("hello"))// HELLO
}
  • 方法定義在{}
  • 參數后邊跟著->
  • ->后邊跟著方法體
  • str是參數名字
  • String是參數類型
  • 返回值為.uppercase()方法的返回值類型

固定格式,沒什么可研究的

如果是無參數的Lambda方法

fun main() {{ println("hello") }()  // hello
}

Lambda表達式可以以多種方式使用

  • 將lambda分配給稍后可以調用的變量
  • 將lambda表達式作為參數傳遞給另一個函數
  • 從函數返回lambda表達式
  • 單獨調用lambda表達式

賦值給變量

fun main() {val upperCaseString = { string: String -> string.uppercase() }println(upperCaseString("hello"))// HELLO
}

函數類型

對于使用變量接收一個Lambda函數時,可能需要對函數進行類型定義

  • 參數類型寫在()內,多個類型用,分割
  • 返回值類型跟在->后邊
val upperCaseString1: (String) -> String = { string -> string.uppercase() }
// 					     ↑          ↑
//                    參數類型   返回值類型		
val upperCaseString2 : () -> String = { "hello" }fun main() {println(upperCaseString("hello"))// HELLO
}

作為參數使用

fun main() {val numbers = listOf(1, -2, 3, -4, 5, -6)val positives = numbers.filter { x -> x > 0 }val negatives = numbers.filter { x -> x < 0 }println(positives) // [1, 3, 5]println(negatives) // [-2, -4, -6]
}

.fileter()方法接收一個Lambda方法作為參數

  • { x -> x > 0 } 獲取List中>0的元素
  • { x -> x < 0 } 獲取List中<0的元素

作為返回值在方法中返回

fun main() {fun toSeconds(time: String): (Int) -> Int = when (time) {
//                      ↑          ↑       ↑
//          toSeconds的參數及類型   ↑  要返回的lambda函數的返回值類型   
//                        要返回的lambda函數的參數類型        "hour" -> { value -> value * 60 * 60 }"minute" -> { value -> value * 60 }"second" -> { value -> value }else -> { value -> value }}fun main() {val timesInMinutes = listOf(2, 10, 15, 1)val min2sec = toSeconds("minute")val totalTimeInSeconds = timesInMinutes.map(min2sec).sum()println("Total time is $totalTimeInSeconds secs")  // Total time is 1680 secs}
}

Trailing lambdas (后置Lambda)

.fold()方法接收一個Int和一個lambda函數,調用方法時可寫做

println(listOf(1, 2, 3).fold(0, { x, item -> x + item })) // 6

使用后置lambda方式時可寫做

println(listOf(1, 2, 3).fold(0) { x, item -> x + item })  // 6

lambda函數放在()

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

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

相關文章

人工智能基礎_機器學習047_用邏輯回歸實現二分類以上的多分類_手寫代碼實現邏輯回歸OVR概率計算---人工智能工作筆記0087

然后我們再來看一下如何我們自己使用代碼實現邏輯回歸的,對二分類以上,比如三分類的概率計算 我們還是使用鶯尾花數據 首先我們把公式寫出來 def sigmoid(z): 定義出來這個函數 可以看看到這需要我們理解OVR是如何進行多分類的,我們先來看這個 OVR分類器 思想 OVR(One-vs-…

UE 進階篇一:動畫系統

導語: 下面的動畫部分功能比較全,可以參考這種實現方式,根據自己項目的顆粒度選擇部分功能參考,我們商業項目動畫部分也是這么實現的。 最后實現的效果如下: 最終效果 目錄: ------------------------------------------- 文末有視頻教程/工程地址鏈接 -------------…

9、鴻蒙應用桌面圖標外觀和國際化

一、項目資源目錄 項目下的resoueces目錄為資源配置目錄&#xff0c;其中base為基礎配置&#xff0c;即在任何語言環境下都會加載的資源&#xff0c; color.json&#xff1a;用于配置顏色&#xff0c;如頁面的背景和文字的顏色。 string.json&#xff1a;用于設置文字&#…

Selenium切換窗口、框架和彈出框window、ifame、alert

一、切換窗口 #獲取打開的多個窗口句柄 windows driver.window_handles #切換到當前最新打開的窗口 driver.switch_to.window(windows[-1]) #最大化瀏覽器 driver.maximize_window() #刷新當前頁面 driver.refresh() 二、切換框架frame 如存在以下網頁&#xff1a; <htm…

Java基礎(程序控制結構篇)

Java的程序控制結構與C語言一致&#xff0c;分為順序結構、選擇結構&#xff08;分支結構&#xff09;和循環結構三種。 一、順序結構 如果程序不包含選擇結構或是循環結構&#xff0c;那么程序中的語句就是順序的逐條執行&#xff0c;這就是順序結構。 import java.util.Sc…

【 OpenGauss源碼學習 —— 列存儲(CStoreMemAlloc)】

列存儲&#xff08;CStoreMemAlloc&#xff09; 概述CStoreMemAlloc 類CStoreMemAlloc::Palloc 函數CStoreMemAlloc::AllocPointerNode 函數CStoreMemAlloc::FreePointerNode 函數CStoreMemAlloc::Repalloc 函數CStoreMemAlloc::PfreeCStoreMemAlloc::Register 函數CStoreMemAl…

杭電oj 2064 漢諾塔III C語言

#include <stdio.h>void main() {int n, i;long long sum[35] { 2,8,26 };for (i 3; i < 35; i)sum[i] 3 * sum[i - 1] 2;while (~scanf_s("%d", &n))printf("%lld\n", sum[n - 1]); }

問鼎web服務

華子目錄 www簡介常見Web服務程序介紹&#xff1a;服務器主機主要數據瀏覽器網址及http介紹urlhttp請求方法 http協議請求的工作流程www服務器類型靜態網站動態網站 快速安裝Apache安裝準備工作httpd所需目錄主配置文件 實驗操作 www簡介 Web網絡服務也叫www&#xff08;world…

編碼的發展歷史

編碼的發展歷史 ASCII&#xff1a; ASCII編碼使用7位二進制數表示一個字符&#xff0c;范圍從0到127。每個字符都有一個唯一的ASCII碼值與之對應。例如&#xff0c;大寫字母"A"的ASCII碼是65&#xff0c;小寫字母"a"的ASCII碼是97。 ASCII字符集包括英文…

linux服務器安裝gitlab

一、安裝gitlab sudo yum install curl policycoreutils-python openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-servicehttp curl https://packages.gitlab.com/install/repositories/gitla…

LabVIEW中將SMU信號連接到PXI背板觸發線

LabVIEW中將SMU信號連接到PXI背板觸發線 本文介紹如何將信號從PXI&#xff08;e&#xff09;SMU卡路由到PXI&#xff08;e&#xff09;機箱上的背板觸發線。該過程涉及使用NI-DCPowerVI將SMU信號導出到PXI_TRIG線上。 在繼續操作之前&#xff0c;請確保在開發PC上安裝了兼容版…

MySQL啟動MySQL8.0并指定配置文件

MySQL啟動MySQL8.0并指定配置文件 mkdir -p /mysql8hello/config ; mkdir -p /mysql8hello/data ; mkdir -p /mysql8hello/logs; mkdir -p /mysql8hello/conf; vim /mysql8hello/config/my.cnf; # 啟動報錯就修改成777&#xff0c;但是會提示風險 chmod 644 /mysql8hello/co…

d3dx9_43.dll缺失怎么辦?教你一分鐘修復d3dx9_43.dll丟失問題

今天&#xff0c;與大家分享關于“d3dx9_43.dll丟失的5個解決方法”的主題。在我們的日常生活和工作中&#xff0c;我們可能會遇到各種各樣的問題&#xff0c;而d3dx9_43.dll丟失就是其中之一。那么&#xff0c;什么是d3dx9_43.dll呢&#xff1f;它為什么會丟失&#xff1f;又該…

【LeetCode刷題-鏈表】--25.K個一組翻轉鏈表

25.K個一組翻轉鏈表 思路&#xff1a; 把鏈表節點按照k個一組分組&#xff0c;可以使用一個指針head依次指向每組的頭節點&#xff0c;這個指針每次向前移動k步&#xff0c;直至鏈表結尾&#xff0c;對于每個分組&#xff0c; 先判斷它的長度是否大于等于k&#xff0c;若是&am…

什么是Zero-shot(零次學習)

1 Zero-shot介紹 Zero-shot學習&#xff08;ZSL&#xff09;是機器學習領域的一種先進方法&#xff0c;它旨在使模型能夠識別、分類或理解在訓練過程中未見過的類別或概念。這種學習方法對于解決現實世界中常見的長尾分布問題至關重要&#xff0c;即對于一些罕見或未知類別的樣…

商務俄語學習,柯橋基礎入門教學,千萬別小看俄語中的“что”

1、что до (чего) 至于 例&#xff1a; что до меня, то я не могу согласиться 至于我&#xff0c;我不能同意。 А что до зимовки... Ты приедешь в этом году? 說到冬天和過冬…你今年回來嗎…

在windows筆記本中安裝tensorflow1.13.2版本的gpu環境2

tensorflow1.13.2版本的gpu環境 看python-anacona的安裝只需要看1.1部分即可 目錄 1.1 Anaconda安裝 1.2 tensorflow-gpu安裝 1.3 python編譯器-pycharm安裝 1.1 Anaconda安裝 從鏡像源處下載anaconda&#xff0c;地址&#xff1a;Index of /anaconda/archive/ | 北京…

PTA-6-45 工廠設計模式-運輸工具

題目如下&#xff1a; 工廠類用于根據客戶提交的需求生產產品&#xff08;火車、汽車或拖拉機&#xff09;。火車類有兩個子類屬性&#xff1a;車次和節數。拖拉機類有1個子類方法耕地&#xff0c;方法只需簡單輸出“拖拉機在耕地”。為了簡化程序設計&#xff0c;所有…

基于docker實現JMeter分布式壓測

為什么需要分布式&#xff1f; 在工作中經常需要對一些關鍵接口做高QPS的壓測&#xff0c;JMeter是由Java 語言開發&#xff0c;沒創建一個線程&#xff08;虛擬用戶&#xff09;&#xff0c;JVM默認會為每個線程分配1M的堆棧內存空間。受限于單臺試壓機的配置很難實現太高的并…

LeetCode59.螺旋矩陣

LeetCode59.螺旋矩陣 1.問題描述2.解題思路3.代碼 1.問題描述 給你一個正整數 n &#xff0c;生成一個包含 1 到 n2 所有元素&#xff0c;且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1&#xff1a; 輸入&#xff1a;n 3 輸出&#xff1a;[[1,2,3],[8,9,…