https://mangkyu.tistory.com/111
[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?
1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를..
mangkyu.tistory.com
[Kotlin]함수형 프로그래밍 초간단 이해하기
함수형 프로그래밍. 개발하다 보면 한 번쯤은 들어봤을 법한 말이다. 안 들어봤다 해도 지금 이 순간 봤으니 들어본 것이라 할 수 있다. 아무튼 일단 함수형 프로그래밍을 하기에 앞서 무엇인지
medium.com
위 두 사이트를 보니까 그냥 한줄로 잘 만든 map, lambda나 filter로써 파이썬에서 이미 사용하고 있었다.
RGB = [list(map(int, input().split())) for _ in range(N)]
신기한건 ::를 이용해 함수를 변수로 처리하고, 함수 안에 함수, 클래스 등 다 들어간다는 것. 일급객체로 만든다는 의지가 느껴진다.
같은 내용을 여러 다른 함수형 방법으로 작성한게 edwith에 올라왔는데 정말 정말 정말 정말 정말 정말 정말 정말 정말 좋은 것 같다. 저작권 문제때문에 못올림.
난 클로저 활용, 캡쳐변수랑 고차함수가 마음에 든다. 고차함수는 map, lambda, fold, reduce 등. fold랑 reduce 차이는 fold는 첫번째 값을 지정할 수 있음.
스코프 안에서 it은 { index -> index어쩌구 저쩌구.. } 할때의 -> 이 불편함을 그냥 { it어쩌구 저쩌구 } 로 해주는 역할. 알고보니 쉽다.
스코프 함수 시 스코프의 맨 마지막에 있는게 return 되는 값.
커링, 합성함수가 뭐지? 찾아봐야 할듯
커링은 함수 인자 2개 받는걸 return을 이용해 하나씩 받는걸로 바꾸는걸 말한다. 아렇게 바꾸면 f(x)f(y)처럼 진짜 수학식 처럼 나타낼 수 있는듯.
함성함수는 f(x)g(x)를 f(g(x))로.
https://itandhumanities.tistory.com/26
[코틀린을 다루는 기술] 코틀린 함수 정리
이 글은 길벗 사의 '코틀린을 다루는 기술' 을 읽으면서 정리한 포스팅입니다. 더 자세한 내용은 '코틀린을 다루는 기술' 책에서 찾아보시면 좋을 것 같습니다. 서론 디프만 8기에서 코틀린 스터
itandhumanities.tistory.com
https://zion830.tistory.com/102
코틀린을 다루는 기술 3장 정리 - 함수로 프로그래밍하기
코틀린을 다루는 기술 3장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 개요 함수의 출력이 결정적이고, 외부 상태에 의존하지 않는
zion830.tistory.com
순수함수는 외부 변수를 사용하는 일 없이 오로지 함수 안에서 모든걸 해결하여 f(x) = y 이 사실은 어떠한 상황에서도 불변하게 만드는걸 말하는 것 같다. 즉 같은 입력값에 대해선 무조건 같은 결과값이 나와야 함. 이건 외부 변수 안쓰고 안에서 다 해결하면 되는 문제니까. 또한 같은 값이 나오더라도 외부 값을 변화시켜서도 안됨. 즉 아무것도 하지말고 그냥 값만 반환하라고.
함수 참조 너무 신박하다. 또 함수 참조를 보니 왜 커링을 하라는지 알겠다. 변수를 한개만 받도록 만들면 이런 여러 새로운 기술들을 쓸 수 있다.
http://www.yes24.com/Product/Goods/89564200
코틀린을 다루는 기술 - YES24
코틀린은 자바와 부드럽게 연동되는 우아한 JVM 언어로, 구글은 2019년부터 안드로이드에서 최우선 언어로 코틀린을 채택했다. 『코틀린을 다루는 기술』은 이해하기 쉽고 유지 보수하기 편하며
www.yes24.com
[코틀린으로 배우는 함수형 프로그래밍] 4장 고차함수
안녕하세요 남갯입니다. 함수형프로그래밍에서는 함수를 객체처럼 다룬다. 고차함수를 통해 함수를 더 유연하게 다루는 방법에 대해 알아보고 고차함수의 장점을 살펴보자. 고차함수란? 코틀
namget.tistory.com
매개변수 넘겨줄 때 함수를 변수처럼 정의했으니 함수를 매개변수로 넘겨줄 수도 있다.
// 커링을 사용한 형태로 변경. 더 다양한 표현식으 만들 수 있다.
val isFactor: (Int) -> (Int) -> Boolean = {num ->
{ i->
num%i==0
}
}
나도 apply 가 뭔지 알아내서 사용해봐야 할 것 같다.
if, else if, else if, ... 대신 when을 써서 더 간단하게 할 수 있다. 아님 대괄호 없이 한줄로도 표현 가능. 또는 fold를 써서 고급스럽게 할 수도 있다.
print((2..100).fold(""){
print, i -> print + "$i : " +
(if(isAbundant(i))"abundant, " else "") +
(if(isDeficient(i))"deficient, " else "") +
(if(isPerfect(i))"perfect" else "") +
(if(isSquared(i))"squared" else "") +
(if(isPrime(i))"prime" else "") + "\n"
})
var resultAboutNum: (Int) -> String = {
val numAlpha = ClassifierAlpha(it)
"$it : " + when {
numAlpha.isPerfect() -> "perfect, "
numAlpha.isAbundant() -> "abundant, "
else -> "deficient, "
} + when {
numAlpha.isPrime() -> "prime"
numAlpha.isSquared() -> "squared"
else -> ""
}
}
변수 정의하고 하는 식으로 좀 복잡한거 안쓰면 대괄호 대신 소괄호 쓰는게 나은듯.
intelliJ에서 컴파일한걸 역컴파일하는 기능을 제공해준다. 보는것도 좋은듯.
'강의 > 부캠 안드로이드 학습정리' 카테고리의 다른 글
day 11. 멀티프로세스, 멀티스레드, 우선순위 (0) | 2021.08.02 |
---|---|
day 9. git 저장소 만들기 (0) | 2021.07.29 |
day 7 클래스 상속 (0) | 2021.07.27 |
day 6 xml, html parser 만드는데 너무 어려웠음 (0) | 2021.07.27 |
day4. 공간 할당의 어려움.. (0) | 2021.07.22 |