Kotlin (17) 함수 식 프로 그래 밍 < 1 >
넓 은 의미 의 함수 식 프로 그래 밍 은 모두 순수 함 수 를 강조 하지 않 는 다.일반적인 함수 식 언어 특성:
순 함수 와 인용 투명 성
sealed class Format
data class Print(val text: String) : Format()
object Newline : Format()
val string = listOf(Print("Hello"),
Newline, Print("Kotlin"))
fun unsafeInterpreter(str:List){
str.forEach {
when(it){
is Print -> print(it.text)
is Newline -> println()
}
}
}
부작용 도입
1. 테스트 가능성 이 부족 하 다.변경 되면 print 가 아 닌 데이터 베 이 스 를 쓰 는 방법 을 추가 하고 테스트 할 때 번 거 로 울 수 있 습 니 다.
2. 조합 하여 재 활용 하기 어렵다.내부 에 문자열 형식 전환 논리 가 혼합 되 어 있 습 니 다. 인쇄 작업 이 아니 라 데이터 베이스 작업 이 라면 문자열 변환 기능 으로 사용 할 수 없습니다.
조금 만 바 꾸 고 예 를 들 어 설명 하 세 요.
fun stringInterpreter(str:List)
= str.fold(""){fullText,s ->
when(s){
is Print -> fullText + s.text
is Newline ->fullText + "
"
}
}
함수 가 문자열 결 과 를 되 돌려 줍 니 다. 테스트 든 재 활용 이 든 모두 향상 되 었 습 니 다.
:
하나의 표현 식 은 프로그램 에서 결과 에 영향 을 주지 않 고 등가 의 값 으로 바 꿀 수 있 습 니 다.하나의 함수 가 인용 투명 성 을 갖 추고 내부 행 위 는 외부 상 태 를 바 꾸 지 않 습 니 다.
수학 속 의 등식 추리 와 비슷 하 다.
인용 투명 은 가 변 적 이지 않다 는 것 이 아니 라 부분 적 으로 가 변 적 이 며 전체 호출 은 블랙 박스 이 며 결 과 는 일치 합 니 다.
fun foo(x:Int):Int{
var y = 0
y = y + x
return y
}
foo 는 순수 함수 f (x) - > y 를 갖 추고 있 습 니 다.
부작용 은 일정한 추상 적 인 개념 에서 부작용 이 절대 없 는 것 이 아니 라 순 함수 라 도 메모 리 를 사용 하여 cpu 를 점용 합 니 다.
순 함수 가 한계 가 있 는 random 랜 덤 함수 결과 가 일치 하지 않 는 것 은 모두 다 릅 니 다. 순 함수 가 아 닙 니 다.
대체 모델 과 타성 값 구하 기
잘못된 예 StackOverflow 오류 순환
fun f1(x:Int,y:Int) = x
fun f2(x:Int):Int = f2(x)
fun lazyPrintln(msg:String) = { println(msg)}
우리 가 lazy Println ("I am IO operation") 을 실행 할 때 그 는 실행 가능 한 println 만 되 돌려 주 는 것 은 타성 이 고 대체 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.