Kotlin 函數與 Lambda 表達式

今天繼續分享Kotlin學習內容。
目標:掌握函數定義、調用、參數傳遞,以及 Lambda 表達式的基礎用法

1. 函數:Kotlin 的代碼模塊化工具

定義:函數是可重復調用的代碼塊,用于封裝邏輯。
語法:

fun 函數名(參數列表): 返回類型 {// 函數體return 結果  // 可省略(若表達式函數或返回類型可推斷)
}

示例 1:基礎函數

fun greet(name: String): String {return "Hello, $name!"
}fun main() {println(greet("Alice"))  // 輸出: Hello, Alice!
}

示例 2:無返回值函數(Unit 類型可省略)

fun printMessage(message: String) {println("Message: $message")
}fun main() {printMessage("Kotlin is fun!")  // 輸出: Message: Kotlin is fun!
}

示例 3:默認參數與命名參數

fun calculateArea(width: Double, height: Double = 10.0): Double {return width * height
}fun main() {println(calculateArea(5.0))          // 使用默認 height: 輸出 50.0println(calculateArea(5.0, 20.0))   // 覆蓋默認值: 輸出 100.0
}

2. Lambda 表達式:輕量級匿名函數

定義:Lambda 是沒有名稱的函數,通常用于簡化代碼。
語法:

{ 參數列表 -> 函數體 }

示例 1:Lambda 基礎

fun main() {val greetLambda: (String) -> String = { name -> "Hi, $name!" }println(greetLambda("Bob"))  // 輸出: Hi, Bob!
}

示例 2:Lambda 作為函數參數

fun processString(input: String, transform: (String) -> String): String {return transform(input)
}fun main() {val result = processString("kotlin") { it.uppercase() }  // 參數名用 it 隱式表示println(result)  // 輸出: KOTLIN
}

示例 3:高階函數與 Lambda 結合

fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {return operation(a, b)
}fun main() {val sum = operateOnNumbers(3, 5) { x, y -> x + y }    // 加法val product = operateOnNumbers(3, 5) { x, y -> x * y } // 乘法println("Sum: $sum, Product: $product")  // 輸出: Sum: 8, Product: 15
}

3. 函數 vs Lambda:何時使用?

函數:
需要復用邏輯時。
邏輯復雜,需多行代碼時。
Lambda:
邏輯簡單,僅需一次使用時。
作為參數傳遞給高階函數時(如 map, filter)。

4. 今日練習建議

最后來練習一下吧
任務 1:定義一個函數 calculateDiscount(price: Double, discount: Double): Double,返回折扣后的價格。
任務 2:用 Lambda 表達式重寫 calculateDiscount,并調用它。
任務 3:編寫一個高階函數 applyOperation,接受兩個數字和一個 Lambda 操作(如加法、減法),返回結果。

// 示例調用
val result = applyOperation(10, 5) { a, b -> a - b }  // 輸出 5

挑戰題:用 Lambda 和 map 函數將一個字符串列表轉為大寫形式:

val names = listOf("alice", "bob", "charlie")
// 輸出: [ALICE, BOB, CHARLIE]

5. 常見錯誤提示

錯誤 1:Lambda 參數類型推斷失敗時,需顯式聲明類型:

val lambda: (Int, Int) -> Int = { a, b -> a + b }  // 顯式聲明類型

錯誤 2:忘記 Lambda 的最后一個表達式是返回值(無 return 關鍵字)。
錯誤 3:混淆函數和 Lambda 的調用方式(函數直接寫名稱,Lambda 需賦值或傳遞)。

Lambda 是 Kotlin 的“瑞士軍刀”,尤其在集合操作(如 filter, map)中非常強大。
默認參數和命名參數能讓函數更靈活,減少重載函數的編寫。

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

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

相關文章

[mcp-servers] docs | AI客戶端-MCP服務器-AI 架構

鏈接:https://github.com/punkpeye/awesome-mcp-servers 服務器調用 相關專欄:實現Json-Rpc docs:精選MCP服務器資源列表 本專欄為精選 模型上下文協議(MCP)服務器的列表。 MCP 是一種標準協議語言,允許*…

1688商品發布API:自動化上架與信息同步

一、1688商品發布API的核心功能與技術架構 1.1 API功能全景 1688商品發布API是1688開放平臺的核心組件之一,支持商品信息的自動化發布、編輯、上下架及庫存同步。其核心功能包括: 商品信息管理:支持商品標題、描述、價格、庫存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模擬器運行環境

0 軟硬件環境 x86_64服務器Ubuntu20.04 LTS參考:Cuttlefish 虛擬 Android 設備參考: 筆記:搭建 Cuttlefish 運行環境可以下載編好的android-cuttlefish:android-cuttlefish.tar.gz 1 系統采用Ubuntu20.04 LTS 2 搭建cuttlefish…

機器學習9——決策樹

決策樹 Intro 歸納學習(Inductive Learning)的目標:從訓練數據中學習一般規則,應用于未見過的數據。 決策樹是一個樹形結構,其中: 每個分支節點表示一個屬性上的選擇(即決策條件)。…

CppCon 2017 學習:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆達爾定律),這是一條描述并行計算加速能力的核心定律。 定義公式: S 1 ( 1 ? P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1?P)NP?1? S S S:加速比(Speedup&#xff09…

60頁PPT實戰方案 | 大數據決策分析平臺建設全流程路徑圖

目錄 一、什么是大數據決策分析平臺? 二、為什么要做大數據決策分析平臺建設? 1. 數據已經成為“資源”,但多數組織還停留在“信息孤島” 2. 管理復雜度上升,傳統報表跟不上業務節奏 3. 外部環境不確定性高,倒逼企…

芯谷科技--降壓型DC-DC轉換器D4005

在現代電子設備中,電源管理芯片的性能直接關系到設備的穩定性和效率。D4005以其高效、穩定的性能和廣泛的應用范圍,成為眾多工程師在設計電源方案時的優選。 產品簡介 D4005 是一款高效降壓型 DC-DC 轉換器,具備固定 400KHz 開關頻率&#…

【51單片機節日彩燈控制器設計】2022-6-11

緣由單片機節日彩燈控制器設計-編程語言-CSDN問答 #include "reg52.h" sbit k0P1^2; sbit k1P1^3; sbit k2P1^4; sbit k3P1^5; bit k0,kk0; void main() {unsigned char Xd0;unsigned int ys0; while(1){if(k00&&Xd0){kk0;kP31;while(k00);}if(k10&&…

PyEcharts教程(010):天貓訂單數據可視化項目

文章目錄 1、讀取數據2、數據處理3、重復值查看4、缺失值查看5、PyEcharts可視化5.1 各個省份的訂單量5.2 時間序列分析5.3 每天訂單量統計可視化6、數據下載1、讀取數據 1??讀取數據: import pandas as pd from pyecharts import options as opts from pyecharts.charts …

Redis 持久化之 AOF 策略

1. 什么是 AOF AOF 是 append only file,AOF 文件中記錄了每次的操作指令,在啟動 Redis 時,會將 AOF 文件中的數據讀取出來以恢復數據。 2. 開啟 AOF Redis 默認關閉 AOF,可以通過將 Redis 配置文件中的 appendonly 設置為 ye…

實現OFD轉換PDF文件的實用方法

ODF格式的文件屬于國內新型的文件格式,一般應用在保密等級比較高的系統或者單位中,比如一般政務方面或者法律行業經常會用到這種類型的文件,但是有些時候我們把文件分享給別人的時候別人不一定能打開,這時候就需要把OFD文件轉換成…

JSON + 存儲過程:SaaS 架構下的統一接口與租戶定制之道

在多租戶 SaaS 系統中,不同客戶往往有差異化的業務邏輯、字段要求與流程規則。傳統“統一模型 配置參數”的開發模式,雖然具有可控性,但在高度動態、合作多樣化的場景下,逐漸暴露出擴展困難、上線周期長、定制成本高等問題。 隨…

各種常用的串口助手工具分享

記錄一篇常用串口工具的文章 工具的下載鏈接:https://download.csdn.net/download/m0_59415345/91204823?spm1001.2014.3001.5503 各工具的使用操作說明參考嵌入式hxydj博主的文章:https://blog.csdn.net/qq_20222919/article/details/117038284

AVL樹的簡潔寫法

文章目錄 零、寫在前面一、AVL 樹定義1.1 性質1.2 樹高的證明 二、AVL樹實現(AVL樹實現名次樹)2.1 節點定義2.2 左/右旋轉2.3 zig-zag / zag-zig 雙旋2.4 重平衡函數2.5 插入2.6 刪除2.7 排名查詢2.8 查前驅/后繼2.9 查第 k 小2.10 完整代碼 三、online …

紅外圖像增強(dde):基于“基礎層-細節層”分解的增強算法

1、引言 與可見光圖像相比,紅外熱成像捕捉的是物體表面的溫度分布,其原始數據(通常為12位或14位)包含了極寬的溫度動態范圍。然而,人眼能夠感知的灰度范圍以及顯示設備能夠展示的灰度級(通常為8位&#xf…

Java-day28-其他流

1. 緩沖流 昨天學習了基本的一些流,作為IO流的入門,今天我們要見識一些更強大的流。比如能夠高效讀寫的緩沖流,能夠轉換編碼的轉換流,能夠持久化存儲對象的序列化流等等。這些功能更為強大的流,都是在基本的流對象基礎…

S712001 開放式用戶通信

開放式用戶通信分類 TIA PORTAL 軟件內提供了以下指令: 不帶連接管理的通信指令 “TCON ” :建立以太網連接“TDISCON” :斷開以太網連接“TSEND” :TCP 和 ISO ON TCP 使用的發送數據“TRCV”: TCP 和 ISO ON TCP 使…

CSMatIO庫的安裝與C#實現.mat文件生成

一.CSMatIO介紹 CSMatIO 是一個用于讀寫 MATLAB .mat 文件的開源 C# 庫,它提供了簡單而高效的 API,使 .NET 應用程序能夠與 MATLAB 進行數據交換,支持讀取和寫入 MATLAB 的 .mat 文件(版本 5 和 7.3),兼容…

設計一個interface (一)

好的,我來舉一個具體的例子,幫助你理解 interface、element、resource 和 architecture 之間的關系。 場景:設計一個用戶管理系統的接口 背景 假設我們正在設計一個用戶管理系統,系統中有兩個主要的模塊: 用戶服務模…

tomcat下載安裝

目錄 一.tomact簡介 二.詳細步驟 三.下載頁面詳解(選看) 一.tomact簡介 Tomcat是Apache軟件基金會下的一個核心項目,它是一個開源的Java Servlet和JSP容器。由Apache、Sun等公司及個人共同開發,由于Sun的參與,最新的…