精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Kotlin函數與函數式編程淺析

開發 后端
函數作為Kotlin中的一級公民可以像其他對象一樣作為函數的輸入與輸出,這也就是Java程序員轉到Kotlin覺得變化最大,最難理解的一點。如果你之前學過Python或者C++11可能會對此比較容易接受。這也是為什么本文以介紹Kotlin的函數及函數式編程為主。

[[193403]]

如果你對Kotlin語法一無所知,推薦先閱讀官方文檔或者中文站(https://www.kotlincn.net/docs/reference/)之后再看這篇文章會有更深刻的理解。本篇文章主要介紹Kotlin函數的用法,以及自己對函數式編程的一些理解。并且會和Python,C++做一些比較。

下面是維基百科上對于函數式編程的定義:

函數式編程(英語:functional programming)或稱函數程序設計,又稱泛函編程,是一種編程范型,它將電腦運算視為數學上的函數計算,并且避免使用程序狀態以及易變對象。函數編程語言最重要的基礎是λ演算(lambda calculus)。而且λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值)。

下面是關于高階函數的定義:

在數學和計算機科學中,高階函數是至少滿足下列一個條件的函數:接受一個或多個函數作為輸入,輸出一個函數

不難推斷出函數式編程最重要的基礎是高階函數。也就是支持函數可以接受函數當作輸入(引數)和輸出(傳出值)。

函數作為Kotlin中的一級公民可以像其他對象一樣作為函數的輸入與輸出,這也就是Java程序員轉到Kotlin覺得變化***,最難理解的一點。如果你之前學過Python或者C++11可能會對此比較容易接受。這也是為什么本文以介紹Kotlin的函數及函數式編程為主。

Kotlin 函數

下面是Kotlin中一般的函數定義,和Java不同的是函數形參,返回值類型置后。函數體可以用等號賦值給函數定義,這里也可以看出函數和變量的平等性。

  1. fun main(args: Array) { 
  2.     var s = sum(1,2) 
  3.     var m = multi(2,3) 
  4.     var x = maxOf(3,4) 
  5.  
  6. fun sum(a: Int, b: Int): Int { 
  7.     return a + b 
  8.  
  9. fun multi(a: Int, b: Int): Int = a * b 
  10.  
  11. fun maxOf(a: Int, b: Int): Int = if (a > b) a else b  

另外Kotlin還支持函數默認參數,拓展函數,中綴表達式,下面是簡單的例子:

  1. fun main(args: Array) { 
  2.     isBiggerThan(2) 
  3.     isBiggerThan(2, 5) 
  4.     var s = "a".isLetter() 
  5.     var a = 1 add 2 
  6.  
  7. fun isBiggerThan(a: Int, b: Int = 0) { 
  8.     return a > b 
  9.  
  10. //拓展函數 
  11. fun String.isLetter(): Boolean { 
  12.     return matches(Regex("^[a-z|A-Z]$")) 
  13.  
  14. //拓展函數,中綴表達式 
  15. infix fun Int.add(x: Int): Int { 
  16.     return this + x 
  17.  

支持默認參數的函數可以減小函數的重載。

String對象中本沒有判斷是否是字母的方法,在Java中我們一般會定義一些Utils方法,而在Kotlin中可以定義類的拓展函數。

第二個例子是給Int類定義了一個拓展函數,并且該拓展函數以中綴表達式表示,給予了開發者定義類似關鍵字的權利。

比如我們可以這樣創建一個map對象:

  1. val kv = mapOf("a" to 1, "b" to 2) 

這里的to就是一個中綴表達式,定義如下:

  1. public infix fun<A, B> A.to(that: B): Pair<A, B> = Pair(this, that) 

Pair就是Map中存的對象,所以你也可以這樣創建

  1. val kv = mapOf(Pair("a", 1), Pair("b", 2)) 

在Python中如果我們想讓函數返回多個值,可以返回一個元組,Kotlin基于解構原則也可以實現類似的功能:

  1. fun main(args: Array) { 
  2.     val (indexcount) = findWhere("abcabcabcabc"'c'
  3.  
  4. fun findWhere(str: String, findChar: Char): Pair<IntInt> { 
  5.     var index = -1 
  6.     var count = 0 
  7.     for ((i, v) in str.withIndex()) { 
  8.         if (v == findChar) { 
  9.             if (index == -1) { 
  10.                 index = i 
  11.             } 
  12.             ++count 
  13.         } 
  14.     } 
  15.     return Pair(indexcount
  16.  

自定義對象如何支持解構請查看官方文檔,map支持解構,所以可以像下面這樣遍歷:

  1. for ((k, v) in map) { 
  2.     print("$k -> $v, "
  3.  

高階函數與 Lambda 表達式

“Lambda 表達式”(lambda expression)是一個匿名函數,Lambda表達式基于數學中的λ演算得名,直接對應于其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(注意和數學傳統意義上的不同)。

Python中的lambda表達式:

  1. add = lambda x, y:x+y 

C++中的lambda:

  1. [](int x, int y) -> intreturn x + y; } 

Kotlin中的lambda:

  1. var add = {x: Int, y: Int -> x + y} 

Kotlin 作為一個強類型語言還是比較簡潔的。

我們可以這樣使用一個lambda表達式:

  1. fun main(args: Array) { 
  2. val sumLambda = {a: Int, b: Int -> a + b} 
  3. sumLambda(1, 2) 
  4.  

它可以像函數一樣使用()調用,在kotlin中操作符是可以重載的,()操作符對應的就是類的重載函數invoke()。

你還可以想下面這樣定義一個變量:

  1. val numFun: (a: Int, b: Int) -> Int 

它不是一個普通的變量,它必須指向一個函數,并且函數簽名必須一致:

  1. fun main(args: Array) { 
  2.     val sumLambda = {a: Int, b: Int -> a + b} 
  3.     var numFun: (a: Int, b: Int) -> Int 
  4.     numFun = {a: Int, b: Int -> a + b} 
  5.     numFun = sumLambda 
  6.     numFun = ::sum 
  7.     numFun(1,2) 
  8.  
  9. fun sum(a: Int, b: Int): Int { 
  10.     return a + b 
  11.  

可以看到這個變量可以等于一個lambda表達式,也可以等于另一個lambda表達式變量,還可以等于一個普通函數,但是在函數名前需要加上(::)來獲取函數引用。

這個類似C++中的函數指針,然而在Python中可以直接使用函數名作為函數引用,下面是c++函數指針的例子:

  1. #include  
  2.  
  3. using namespace std; 
  4.  
  5. void swap(int &x, int &y); 
  6.  
  7. int main(int arg, char* args[]) { 
  8.     int x = 10; 
  9.     int y = 20; 
  10.  
  11.     void (*methodPtr)(int &x, int &y);//聲明一個函數指針 
  12.     methodPtr = &swap; //函數指針賦值 
  13.     methodPtr = swap;//取地址符可省略,效果和上面一致 
  14.     methodPtr(x, y); //像給函數起了一個別名,可以直接使用()調用 
  15.     cout << "x:" << x << " y:" << y << endl; //x:20 y:10 
  16.  
  17. void swap(int &x, int &y) { 
  18.     int tmp = x; 
  19.     x = y; 
  20.     y = tmp; 
  21.  

回到Kotlin,我們還可以將一個函數傳遞給另一個函數,比如:

  1. //函數參數 
  2. fun  doMap(list: List, function: (it: T) -> Any) { 
  3.     for (item in list) { 
  4.         function(item) 
  5.     } 
  6.  

***個參數是一個List,第二個參數是一個函數,目的就是將List中的每一個元素都執行一次第二個函數。使用方法如下:

  1. val strList = listOf("h" ,"e""1""a""b""2"" """"c""5""7""F"
  2. doMap(strList, {item ->print("item: ${upperLetter(item)}, ") }) 
  3.  
  4. fun upperLetter(item: String): String { 
  5.     if (item.isLetter()) { 
  6.         return item.toUpperCase() 
  7.     } 
  8.     return item 
  9.  

第二個參數直接傳進去了一個lambda表達式,當然也可以傳一個函數引用:

  1. val strList = listOf("h" ,"e""1""a""b""2"" """"c""5""7""F"
  2. doMap(strList, ::printUpperLetter) 
  3.  
  4. fun printUpperLetter(item: String) { 
  5.     print("item: ${upperLetter(item)}, "
  6.  
  7. fun upperLetter(item: String): String { 
  8.     if (item.isLetter()) { 
  9.         return item.toUpperCase() 
  10.     } 
  11.     return item 
  12.  

效果和上面的代碼一樣。

在C++中使用函數指針可以實現類似的效果:

  1. using namespace std; 
  2.  
  3. void mMap(vector list, void (*fun)(int item)); 
  4.  
  5. int main(int arg, char* args[]) { 
  6.     vector list = {2,3,4,3,2,1,2}; 
  7.     mMap(list, [](int item) -> void { cout << item << endl; }); 
  8.  
  9. void mMap(vector list, void (*fun)(int item)) { 
  10.     for(int it : list) { 
  11.         fun(it); 
  12.     } 
  13.  

再次回到Kotlin,如果函數作為入參在入參列表的***一個,你還可以這樣做,直接寫在大括號內:

  1. fun main(args: Array) { 
  2.     log { sum(1,2) } 
  3.  
  4. fun  log(function: () -> T) { 
  5.     val result = function() 
  6.     println("result -> $result"
  7.  

是不是有點像gradle配置文件的寫法,所以Kotlin可以很方便的編寫 領域專用語言(DSL)

另外Kotlin還支持局部函數和函數作為返回值,看下面的代碼:

  1. fun main(args: Array) { 
  2.     val addResult = lateAdd(2, 4) 
  3.     addResult() 
  4. //局部函數,函數引用 
  5. fun lateAdd(a: Int, b: Int): Function0 { 
  6.     fun add(): Int { 
  7.         return a + b 
  8.     } 
  9.     return ::add 
  10.  

在lateAdd內部定義了一個局部函數,***返回了該局部函數的引用,對結果使用()操作符拿到最終的結果,達到延遲計算的目的。

函數作為一級公民當然可以像普通對象一樣放進map中,比如下面這樣:

  1. val funs = mapOf("sum" to ::sum
  2. val mapFun = funs["sum"
  3. if (mapFun != null) { 
  4.    val result = mapFun(1,2) 
  5.    println("sum result -> $result"
  6.  
  7. fun sum(a: Int, b: Int): Int { 
  8.     return a + b 
  9.  

將一個函數引用作為value放進了map中,取出來之后使用()操作符調用,可以簡化一些if,else的場景。

基于以上函數式編程的特性,Kotlin可以像RxJava一樣很方便的進行相應式編程,比如:

  1. fun printUpperLetter(list: List) { 
  2.     list 
  3.             .filter (fun(item):Boolean { 
  4.                 return item.isNotEmpty() 
  5.             }) 
  6.             .filter { item -> item.isNotBlank()} 
  7.             .filter { 
  8.                 item -> 
  9.                 if (item.isNullOrEmpty()) { 
  10.                     return@filter false 
  11.                 } 
  12.                 return@filter item.matches(Regex("^[a-z|A-Z]$")) 
  13.             } 
  14.             .filter { it.isLetter() } 
  15.             .map(String::toUpperCase) 
  16.             .sortedBy { it } 
  17.             .forEach { print("$it, ") } 
  18.     println() 
  19.  

上面的代碼只是做演示,并無實際意義。具體語法請查看官方文檔。

我相信Kotlin作為一種強類型的現代化語言可以在保證穩定性的同時極大地提高開發者的開發效率。

責任編輯:龐桂玉 來源: Android開發中文站
相關推薦

2023-10-07 00:01:02

Java函數

2022-07-07 09:03:36

Python返回函數匿名函數

2016-10-19 14:35:20

JavaScript函數式編程

2013-09-09 09:41:34

2025-03-11 10:00:20

Golang編程函數

2020-09-24 10:57:12

編程函數式前端

2016-10-31 20:46:22

函數式編程Javascript

2011-03-08 15:47:32

函數式編程

2011-08-24 09:13:40

編程

2022-09-22 08:19:26

WebFlux函數式編程

2023-12-14 15:31:43

函數式編程python編程

2010-03-11 10:34:22

Scala

2020-09-23 07:50:45

Java函數式編程

2012-09-21 09:21:44

函數式編程函數式語言編程

2016-08-11 10:11:07

JavaScript函數編程

2016-08-11 10:34:37

Javascript函數編程

2020-09-22 11:00:11

Java技術開發

2019-09-09 11:40:18

編程函數開發

2010-11-25 09:06:37

Web開發函數式編程

2020-09-04 15:04:17

函數式編程程序員函數
點贊
收藏

51CTO技術棧公眾號

国产精品久久久精品| 欧美成人三级在线| 黄色高清视频网站| 99久久婷婷国产一区二区三区| 欧美激情第10页| 日韩精品免费在线视频| 亚洲欧美自拍另类日韩| 美女日批视频在线观看| 久久久综合精品| 国产在线观看一区二区三区 | 日韩aaaa| 亚洲白拍色综合图区| 亚洲成人福利在线观看| 国产丝袜视频在线播放| 国产精品美女久久久久久久网站| www.成人av.com| 欧美成人一区二区视频| 伊人影院久久| 久久久黄色av| 337人体粉嫩噜噜噜| 老牛影视av一区二区在线观看| 精品视频在线免费观看| 精品国产一区三区| 激情视频在线观看| 久久精品一区八戒影视| 国产99视频精品免费视频36| 亚洲婷婷综合网| 伊人久久综合| 欧美黄色成人网| www.99热| 综合国产视频| 亚洲精品短视频| 国产伦精品一区二区三区妓女下载| 国模一区二区| 欧美性生活大片免费观看网址| 日韩中文字幕亚洲精品欧美| 91精品专区| 久久久亚洲精品一区二区三区| 翡翠波斯猫1977年美国| 99在线精品视频免费观看软件| 青青草97国产精品免费观看无弹窗版| 8090成年在线看片午夜| 激情四射综合网| 亚洲精品久久| 久久久www成人免费精品| 精品无码人妻一区二区免费蜜桃| 亚洲精品aaaaa| 亚洲国产精品悠悠久久琪琪| 风韵丰满熟妇啪啪区老熟熟女| www.欧美| 日韩欧美国产成人一区二区| 欧美精品 - 色网| 先锋影音网一区二区| 精品视频1区2区| 91视频这里只有精品| 久久久久久一区二区三区四区别墅| 精品电影在线观看| 国产黄视频在线| 日韩电影av| 在线观看欧美日本| 日韩av片网站| 9999在线精品视频| 日韩一区二区免费电影| 亚洲成人福利视频| 一本色道69色精品综合久久| 亚洲国产古装精品网站| 自拍视频一区二区| 国产伦精品一区二区三区视频 | 亚洲综合色一区| 免费精品国产| 中文字幕一精品亚洲无线一区| 潮喷失禁大喷水aⅴ无码| 91视频一区| 欧美日韩国产成人在线观看| 色播视频在线播放| 久久久一二三| 成人欧美一区二区三区在线湿哒哒| 国产免费叼嘿网站免费| 成人激情av网| 欧美日韩在线精品| 黄色动漫在线| 激情懂色av一区av二区av| 日本熟妇人妻中出| 久久久久毛片免费观看| 亚洲电影av在线| 男人操女人动态图| **女人18毛片一区二区| 国内精品久久影院| 一级黄色av片| 国产成人综合自拍| 欧美日韩国产高清视频| 欧美一区二区三区在线观看免费| 亚洲一区在线电影| 国产视频一区二区视频| 日韩中文字幕无砖| 亚洲欧洲在线免费| 精品99在线观看| 日韩中文字幕区一区有砖一区 | 亚洲你懂的在线视频| 成人免费视频91| 久久福利在线| 日韩成人在线免费观看| 午夜激情视频在线播放| 亚洲欧洲另类| 91视频8mav| 国内精品一区视频| 亚洲一区二区三区四区不卡| 高清一区在线观看| 久久人人爽人人爽人人片av不| 中文字幕一精品亚洲无线一区| 国产成人精品a视频一区| 久久成人久久鬼色| 欧美动漫一区二区| 国产极品人妖在线观看| 91精品国产aⅴ一区二区| 久久久久久久久久久国产精品| 欧美1区3d| 国产精品日韩在线一区| 亚洲区小说区图片区| 亚洲男女毛片无遮挡| 尤蜜粉嫩av国产一区二区三区| 国偷自产av一区二区三区| 伦理中文字幕亚洲| 在线观看毛片视频| 91免费国产在线观看| 日b视频免费观看| 免费污视频在线一区| 日韩电影中文字幕在线观看| 欧美日韩激情在线观看| 国产在线一区观看| 亚洲综合第一| 本网站久久精品| 国产午夜精品全部视频在线播放 | 久久久亚洲一区| 国产精品一国产精品最新章节| a级网站在线播放| 欧美伦理视频网站| 国产无遮挡在线观看| 日日夜夜精品视频天天综合网| 国产无套精品一区二区| 欧美aaaaaaa| 欧美成人在线直播| 久久午夜鲁丝片午夜精品| 国产不卡视频在线观看| 日本丰满大乳奶| 精品视频一二| 欧美精品一二区| 亚洲AV午夜精品| 亚洲在线成人精品| 午夜男人的天堂| av成人毛片| 欧美精品二区三区四区免费看视频| 136福利第一导航国产在线| 精品国产乱码久久久久久免费| 欧美黑人猛猛猛| 国产 日韩 欧美大片| 福利视频免费在线观看| 狼人精品一区二区三区在线| 2024亚洲男人天堂| 国产高清视频免费最新在线| 欧美午夜精品久久久久久超碰| av在线免费播放网址| 精品一区二区三区在线观看国产| 麻豆中文字幕在线观看| 免费一级欧美在线大片| 久久久久久久91| 天堂资源最新在线| 欧美曰成人黄网| 成人一级黄色大片| 成人免费高清视频| 女人另类性混交zo| 99久久99久久精品国产片果冰| 成人网址在线观看| zzzwww在线看片免费| 亚洲人成电影网站色…| 国产乱子伦精品无码码专区| 亚洲一区二区三区四区不卡| 加勒比一区二区| 久久91精品久久久久久秒播| 日韩久久久久久久久久久久| 亚洲电影一级片| 成人h视频在线| japanese色国产在线看视频| 亚洲欧洲在线视频| va视频在线观看| 岛国精品视频在线播放| 后入内射无码人妻一区| 成人免费毛片嘿嘿连载视频| 能在线观看的av网站| 欧美国产精品| 欧美亚洲免费高清在线观看| 香蕉大人久久国产成人av| 欧美孕妇与黑人孕交| 日本三级视频在线观看| 精品国产欧美一区二区| 在线观看国产区| 亚洲电影激情视频网站| 少妇高潮惨叫久久久久| www.日韩精品| 中文字幕一二三| 日日夜夜精品视频免费| 国产在线播放观看| 久久久久午夜电影| 日本一区视频在线| 精品国产午夜肉伦伦影院| 国产在线观看精品一区二区三区| 欧美巨大丰满猛性社交| 欧美另类极品videosbest最新版本 | 日韩精品一区二区三区四区五区 | 亚洲 欧洲 日韩| 网友自拍区视频精品| 51国偷自产一区二区三区 | 国产精品大全| 91丨精品丨国产| 国产精品成人av性教育| 玖玖在线播放| 欧美激情影音先锋| 国产鲁鲁视频在线观看特色| 亚洲天堂免费视频| av女名字大全列表| 欧美精品一区二区三区在线| 中文字幕一级片| 色婷婷av一区二区三区gif| 日本在线观看中文字幕| 一区二区三区高清不卡| 欧美激情精品久久久久久免费| 国产午夜久久久久| 老司机免费视频| 国v精品久久久网| 中文字幕亚洲日本| 国产在线精品一区二区三区不卡| 爱情岛论坛成人| 久久中文精品| 黄色国产精品视频| 亚洲一区日韩| 怡红院av亚洲一区二区三区h| 欧美日韩亚洲一区二区三区在线| 最新不卡av| 亚洲91视频| 伊人久久大香线蕉av一区| 精品国产一区二区三区香蕉沈先生| 免费看成人片| 国产99久久久国产精品成人免费 | 午夜影院在线观看欧美| 麻豆一区产品精品蜜桃的特点| 亚洲免费色视频| 亚洲熟女www一区二区三区| 亚洲精品视频在线观看网站| 青青草原在线免费观看| 亚洲精品视频在线观看免费| 久久人人爽人人爽人人| 亚洲大片一区二区三区| 国产区在线观看视频| 狠狠干狠狠久久| 久久久久久亚洲av无码专区| 在线观看日韩精品| 国产精品福利电影| 日韩精品一区国产麻豆| 亚洲国产精品无码久久| 亚洲精品白浆高清久久久久久| 日韩精品123| 中文字幕亚洲国产| 理论片午午伦夜理片在线播放| 欧美麻豆久久久久久中文| 国产精品一品| 热久久这里只有| 黄色成人在线观看网站| 91久久国产自产拍夜夜嗨| h视频久久久| 日韩精品久久久| 911久久香蕉国产线看观看| 国产成人一区二区三区别| 夜夜嗨av一区二区三区网站四季av| 男女午夜激情视频| 久久超碰97人人做人人爱| 又黄又爽又色的视频| 99精品视频在线免费观看| 亚洲AV无码成人精品区明星换面| 亚洲特黄一级片| 日韩av电影网| 欧美日韩在线一区二区| 亚洲第一页在线观看| 亚洲欧美制服另类日韩| 国产精品一卡二卡三卡| 欧美综合第一页| 亚洲影视资源| 久久久综合香蕉尹人综合网| 色天天综合网| av免费观看网| 韩国成人在线视频| 大黑人交xxx极品hd| 中文字幕欧美一| 久久国产视频播放| 91精品福利在线一区二区三区| 天天色棕合合合合合合合| xxxxx成人.com| 中国男女全黄大片| 婷婷亚洲成人| 日韩精品一区二区三区电影| 中文一区二区| 韩国三级hd中文字幕有哪些| 久久综合色播五月| 欧美国产日韩综合| 欧美日韩久久久久久| 天天干免费视频| 欧美精品在线免费播放| 国产第一精品| 欧美三级电影在线播放| 极品av少妇一区二区| 性生生活大片免费看视频| 2020日本不卡一区二区视频| 欧美黄色免费在线观看| 欧美吞精做爰啪啪高潮| 日本高清中文字幕二区在线| 欧美大片第1页| 亚洲成人精品综合在线| 热re99久久精品国产99热| 亚洲黄色av| 精人妻一区二区三区| 成人免费在线播放视频| 中文字幕网址在线| 国产一区二区精品丝袜| 超级碰碰久久| 久久精品成人一区二区三区蜜臀 | 欧美韩国日本综合| 国产成人精品片| 精品不卡在线视频| 青青草原国产在线| 亚洲a级在线播放观看| 999久久久免费精品国产| 69久久久久久| 中文幕一区二区三区久久蜜桃| 99精品人妻国产毛片| 国产偷亚洲偷欧美偷精品| 香蕉伊大人中文在线观看| 国产日韩一区二区三区| 亚洲黄色成人| 亚洲最大的黄色网| 婷婷六月综合亚洲| 午夜视频福利在线| 538国产精品一区二区免费视频| 老牛精品亚洲成av人片| 男人添女人下面高潮视频| 不卡av电影在线播放| 中文字幕第15页| 日韩乱码在线视频| 欧美xxx视频| 亚洲成人自拍视频| 六月丁香婷婷色狠狠久久| www深夜成人a√在线| 6080日韩午夜伦伦午夜伦| 国产精品va在线观看视色 | 中国av一区| 91色国产在线| 亚洲欧美在线aaa| 99riav国产| 久久久久久久久久久久久久久久久久av| 久久99精品久久久野外观看| av在线免费观看国产| 成人免费看视频| 国产成人在线视频观看| 国产一区二区三区视频| 日韩免费大片| 欧美久久久久久久久久久久久久| av电影在线观看不卡| 国产伦精品一区二区三区视频我| 国产一区二区三区三区在线观看| 色999韩欧美国产综合俺来也| 法国空姐在线观看免费| 成人高清视频免费观看| 亚洲 日本 欧美 中文幕| 中文字幕亚洲精品| 9l视频自拍蝌蚪9l视频成人| 欧美国产亚洲一区| 国产精品女同互慰在线看| 国产女人18毛片水18精| 97不卡在线视频| 欧美3p视频| 四虎精品一区二区| 色激情天天射综合网| 国产精品剧情| 极品校花啪啪激情久久| 奇米亚洲午夜久久精品| 国产一级特黄毛片| 亚洲片在线观看| 在线播放一区二区精品视频| 日韩精品一区二区三区色欲av| 最近日韩中文字幕| 日漫免费在线观看网站| 成人欧美一区二区三区黑人| 国产亚洲欧洲| 国产探花在线免费观看| 亚洲毛片在线看| 亚洲五码在线| 另类小说色综合| 午夜精品国产更新| 国产最新在线| 日本在线观看一区| 成人动漫av在线| 国产伦精品一区二区三区视频痴汉|