day 8. 코틀린의 함수형 프로그래밍
강의/부캠 안드로이드 학습정리

day 8. 코틀린의 함수형 프로그래밍

https://mangkyu.tistory.com/111

 

[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?

1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를..

mangkyu.tistory.com

https://medium.com/@sket8993/kotlin-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%B4%88%EA%B0%84%EB%8B%A8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-4dbf36dfc9a7

 

[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

 

 

 


https://namget.tistory.com/entry/%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-4%EC%9E%A5-%EA%B3%A0%EC%B0%A8%ED%95%A8%EC%88%98

 

[코틀린으로 배우는 함수형 프로그래밍] 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에서 컴파일한걸 역컴파일하는 기능을 제공해준다. 보는것도 좋은듯.