Leveraging the Power of Arrow to Build Android(Kotlin) Apps using Functional Programming

[음악 재생] 좋아, 얘들 아 다시 오신 것을 환영합니다

그래서 얼마나 많은 기능적인 프로그래머가 여기에 있습니까? 승인 그럼 지금 놀라운 세션이 있습니다 화살표를 사용하여 안드로이드를 구축하는 힘 모니카 (Monika)의 함수 프로그래밍을 사용한 Kotlin 그녀는 4 년 동안 안드로이드 개발자로 일해 왔습니다 이제부터 그녀를 무대에 오르게해서 시작할 수 있습니다

[음악 재생] MONIKA KUMAR : 개발자 John을 만날 수 있습니다 Kotlin을 처음 사용하고 싶어합니다 그의 프로젝트에서 Kotlin의 함수 프로그래밍 기능 그러면 어떻게 그렇게 할 수 있을까요? 화살표를 입력하십시오 안녕, 모두들

저는 Monika Kumar Jethani입니다 나는 당신을 환영합니다 이 세션의 모든 부분을 활용하면 Arrow 기능적 프로그래밍을 사용하여 Android 애플리케이션을 구축하는 방법 그래서 저는 4 명으로 구성된 다국어 프로그래머입니다 소프트웨어 개발 분야에서 수년간의 경력을 쌓았습니다 관심 분야는 이동성과 인공 지능입니다

코드를 읽고, 코드를 작성하고, 코드에 대해 이야기합니다 그리고 나는 자바가 시작된 같은 날에 태어났습니다 얼마나 많은 사람들이 함수형 프로그래밍을 사용하기 시작 했습니까? 당신의 프로젝트에서? 좋아, 좋아이 세션에서 우리는 함수형 프로그래밍이 무엇인지 조사하고, Kotlin의 기능적 구성물 Arrow 소개, Arrow의 데이터 유형에 대해 자세히 설명합니다 유형 클래스,보다 기능적인 프로그래밍 개념 Arrow가 그 자체로 가져 오는, 그리고 샘플 Arrow 애플 리케이션

그래서 함수형 프로그래밍은 선언적 스타일을 도입합니다 당신이 무엇을해야할지 집중하는 프로그래밍의 하는 방법보다는 계산으로 평가를 처리합니다 수학 함수의 그래서 객체 지향 프로그래밍과는 달리, 프로그램에 국가가있는 곳 객체는 메소드를 통해 상태를 변경합니다

함수형 프로그래밍은 유지 보수 및 변경을 엄격하게 피할 수 있습니다 의 상태 따라서 함수형 프로그래밍의 핵심 개념은 순수한 함수입니다 따라서 순수한 함수 (normal function)처럼, 당신은 입력을 받아, 당신은 출력을 제공합니다 그러나 보편적 인 판매 포인트가 있습니다

순수 함수가 있음을 의미합니다 동일한 입력에 대해 항상 동일한 출력을 제공합니다 b = 1, b = 2, b = 10, 동일한 입력에 대해 동일한 출력을 얻을 수 있습니다 두 번째 요점은 중요한 점입니다 주문 함수는 적용된 매개 변수에만 초점을 맞 춥니 다

그것에 함수 밖에서는 작동하지 않습니다 여기 오른쪽에서 볼 수 있습니다 합계 함수는이 두 가지 이유로 순수한 함수입니다 그래서 언제든지, 내가 1을 동등하게한다면, b = 2이면 항상 출력을 얻습니다

일부 기능은 조작 요소에 초점을 맞추기 때문에 그것은 그것에 제공됩니다 그것은 인스턴스 변수 나 어떤 것이 작동하지 않습니다 함수 밖입니다 따라서 함수형 프로그래밍의 많은 장점이 있습니다 객체 지향 프로그래밍 그래서 우리는 응용 프로그램을 함수로 만듭니다

따라서 코드는보다 간결하고 모듈화됩니다 테스트가 더 쉬워집니다 그것은 예측 가능합니다 당신은 T가 1 인 것을 압니다 또한 a1, b2를 주면 3이됩니다

똑같습니다 – T에서 10을 얻습니다 안전 프로그래밍을 장려합니다 불변성과 순수성과 같은 구조를 도입함으로써 기능 그래서 함수형 프로그래밍은 언어 독립적입니다 그리고 함수를 다루는 언어 일류 시민으로서의 기능적 프로그래밍으로서의 소리 언어

예는 Scala, Haskell 및 Kotlin입니다 이러한 언어에서 함수는 다른 함수로 전달 될 수 있습니다 함수에서 반환 될 수 있습니다 변수에 할당 할 수 있습니다 그럼 Kotlin의 함수 구조를 살펴 보겠습니다

그것들은 변경 불가능한 객체를 의미하는 변경 불가능 성이며, 객체의 상태를 변경할 수 없습니다 그리고 Kotlin에서 val 키워드를 사용하여 불변성을 부여합니다 고차 함수 – 고차 함수 함수를 취하는 함수에 주어진 이름이다 매개 변수 또는 반환 함수로 람다 (Lambdas) – 또 다른 기능을 제공합니다

기능 그러나이 경우에 공급되는 기능은 이름이 없습니다 게으른 평가 – 객체 생성 처음 사용될 때까지 연기됩니다 테일 호출 재귀 – 그래서 모두들 여기서 재귀에 익숙해야합니까? 따라서 꼬리 호출은 메소드의 마지막 호출 동일한 서브 루틴에 호출됩니다 꼬리 호출 재귀, Kotlin의 꼬리 호출 최적화 재귀 호출로 마지막 호출이있는 경우입니다

확장 기능 – 어디에서 할 수 있습니까? 더 많은 메소드를 추가하여 클래스의 기능을 확장하십시오 Null 안전성 – nullable 유형을 나타낼 수있는 곳 유형 뒤에 물음표가 나타납니다 패턴 일치 – 호출 할 변형을 알아 내고, 패턴 또는 유형에 따라 다릅니다 그래서 코 틀린은 우리 모두가 알듯이, 바닥을 걸을 것입니다 자바에 있었다

그리고 그것들을 개선하려고합니다 그래서 우리 모두가 알 수 있습니다 객체 지향 프로그래밍 언어에서 자체는 객체 지향 프로그래밍 언어입니다 따라서 Kotlin은 기본적으로 객체 지향 프로그래밍의 융합입니다 기능 프로그래밍

순수한 함수형 프로그래밍 언어는 아닙니다 기능적 프로그래밍을 시행하지는 않지만, 형식화 된 함수형 프로그래밍을 지원하지 않습니다 그래서이 모든 것을 고치려면 Arrow가 들어갑니다 Arrow는 Kotlin의 표준 라이브러리에 기능적인 동반자입니다 그것은 2017 년에 소개되었습니다

최신 릴리스는 073입니다 가장 인기있는 두 가지 Kotlin 라이브러리의 융합입니다 Kategory 및 funcKTionale을 사용하면 자세한 정보를 얻을 수 있습니다

arrow-ktio에서의 Arrow에 대해 따라서 Arrow에는 세 가지 데이터 유형이 있습니다 더 많은 데이터 유형이 있습니다 하지만이 프레젠테이션에서는 세 가지 중요한 것에 초점을 맞춘다

Option, Either 및 Try입니다 그래서 그들 모두는 봉인 된 수업입니다 그리고 Option은 이름에서 알 수 있듯이, 선택적 값을 나타내는 데 사용됩니다 그래서 Option에 A 타입의 값이 있다면, 그것은 [INAUDIBLE] Some의 가치를 가질 것입니다 그래서 약간의 가치가 있다면 A가 될 것입니다

모든 값은 None이됩니다 그래서 Option은 Some 또는 None을 가질 수 있습니다 예에서 볼 수 있듯이, 우리가 someValue, Some과 문자열을 할당하려한다면, 그것을 인쇄합니다 그래서 우리는 산출물로서 어떤 가치를 얻습니다 따라서이 경우 someValue, 변수, Some 유형의 Option 값을 포함합니다

두 번째 예 – emptyValue 변수 없음 유형의 옵션 값을 포함합니다 그런 다음 옵션을위한 중요한 도구가 있습니다 어떤 유형의 경우, 어떤 작업을 수행하면, 당신은 결과를 얻을 것이다 없음 유형에서, 당신은 작업을 수행하려고 시도하지만, 당신은 결과적으로 항상 None을 얻을 것입니다 따라서이 예에서는 숫자를 볼 수 있습니다

Some 유형의 Option 유형입니다 숫자 없음은 유형 없음의 Option 유형입니다 따라서 옵션에 대한 작업을 수행하려고 할 때 type 일부는 결과를 얻는다 언제 Option 유형 None에서 작업을 수행하려고 시도하면, 당신은 결과를 None으로 얻습니다 두 번째는 출력을 없음으로 얻는 경우입니다

기본 설정을 지정하려는 경우가있을 수 있습니다 null 타입의 경우의 값 – 없음 유형 거기에서 getOrElse를 사용할 수 있습니다 그래서 당신에게 제공하는 옵션을 제공합니다 유연성을 기본 제공 None 유형의 경우 값

그래서 값은 None이고, getOrElse를 사용하면, 이를 기본값으로 지정합니다 그래서 당신이 그것을 출력 할 때, 당신은 디폴트 값을 얻습니다 None 값이기 때문입니다 그런 다음 Option의 사용 사례는 다음과 같을 수 있습니다 우리는 신청서에 양식이 있습니다

따라서 필수 항목은 주로 이메일, ID, 비밀번호, 사용자입니다 이름 이름은 Option이 될 수 있습니다 따라서 Option 데이터 유형을 사용하여 당신의 코드에서 그 이름 그런 다음, 우리 모두는 Kotlin의 when 절 스위치와 같습니다

그래서 절에는 기본값이 있습니다 따라서 기본적으로, 없음을 사용할 수 있습니다 그리고 나머지 경우에는 Some을 사용할 수 있습니다 이제 두 번째 데이터 유형 인 Isither로 넘어갑니다 그 이름에서 알 수 있듯이, 모두 이중 값 중 하나입니다

따라서 왼쪽은 예외 상황을 나타내는 데 사용됩니다 오른쪽은 [INAUDIBLE]을 나타내는 데 사용됩니다 따라서이 예제에서는 right라는 변수를 볼 수 있습니다 그리고 그것은 어느 쪽인가의 유형입니다

그래서 왼편에는 문자열이 있어야합니다 맞습니다 정수를 포함해야합니다 당신은 어느 쪽을 지정합니다 맞아요

그리고 당신이 그것을 인쇄하면, 당신은 권리를 얻습니다 그럼 두 번째 경우에 그래서 왼쪽, 예외를 나타 내기 때문에, 일부 유효성 검증 메시지를 넣을 수 있습니다 따라서 인쇄 할 때 왼쪽 부분이 인쇄됩니다 그래서 당신은 또한 어떤 디폴트 값을 넣으려고 시도 할 수 있습니다 마찬가지로, 권리가 있다면, 당신은 그냥 결과물을 낼 수 있습니다

왼쪽에 기본값을 넣을 수 있습니다 당신은 예외적 인 경우입니다 그냥 0을 출력 할 수 있습니다 따라서 이것이 가능한 예입니다 어느 쪽에서 값을 추출 할 때 사용합니다

Option과 마찬가지로, getOrElse를 Either와 함께 사용할 수 있습니다 게다가 그리고 여기에서도 왼쪽에 기본값을 제공 할 수 있습니다 그래서 여기서 다시 볼 수 있습니다, 우리는 getOrElse를 사용하여 기본값 0을 할당 알려진 부분이있는 왼쪽 부분으로 그래서 당신은 어느 쪽이 될 수 있는지 추측 할 것입니다 그 검증 자료를 표시합니다

우리 양식에는 이메일 양식이 있습니다 그래서 우리는 특정 형식이있을 것으로 기대합니다 그래서 포맷이 바르게 따른다면, 우리는 그것을 입력으로 받아 들일 수 있습니다 그렇지 않으면 유효성 검사 메시지를 표시 할 수 있습니다 어느 쪽이든의 도움으로 이제 시도해 보겠습니다

Try는 Try와 유사합니다 Java 나 C #에서 볼 수 있습니다 그래서 값이 존재하는지 확인해보십시오 존재하는 경우 성공 부분으로 이동합니다 실패하면 실패 부분으로 넘어갑니다

따라서 예제에서 볼 수있는 getQuizQuestions 실패 할 가능성이 있으며 예외가 발생합니다 그래서 그것은 Try 안에 포함되어 있습니다 그래서 Try 내부에 동봉되어 있기 때문에, 그것은 예외를 던질 수 있습니다 예외가 발생하면 출력을 실패로 볼 수 있습니다 그리고 예외 행 번호와 이름을 얻습니다

예외도 마찬가지입니다 Option 및 Either와 유사하므로 다음과 같이 할 수도 있습니다 Try 값을 추출하십시오 성공하면 b 부분을 찾습니다 그래서 우리는 실패한 b로서 성공합니다

따라서 실패한 경우 기본값을 출력 할 수 있습니다 이 경우 0입니다 그리고 성공 – b를 찾을 수 있습니다이 경우는 a입니다 승인

따라서 알려진 함수가 있습니다 Recover로 예외를 처리하는 데 사용됩니다 실패입니다 그래서 복구 – 다시, 예외가 걸립니다, 화면에 표시 할 값을 제공합니다 그 예외가 발생할 때 여기에서는 런타임 예외가 발생합니다

이렇게되면 값 0이 출력됩니다 그리고 이것은 Recover를 사용하여 수행 할 수 있습니다 그래서 try를위한 유스 케이스는 예외를 잡을 수있다 우리가 나누는 것처럼 그래서 우리는 항상 제수가 0이 아닙니다

따라서 Try 블록에서 나누기 코드를 묶을 수 있습니다 기기가 0이 아닌 경우 분할 결과를 출력합니다 값이 0이면 Try를 사용할 수 있습니다 오류 부분으로 리디렉션 할 수 있습니다 그래서 타입 클래스 – 타입 클래스는 Arrow의 중요한 특징입니다

그들은 행동을 나타냅니다 3 가지 타입 클래스가 있습니다 이 세션에서 초점을 맞추십시오 그것은 Functor, Monad 및 Applicative입니다 따라서 Functor는 래핑 된 값에 함수를 적용하는 데 사용됩니다

맵 기능 사용 그래서 여기에서 그들은 A에서 B까지의 기능을 가지고 있다는 것을 알 수 있습니다 우리는 감싸 진 값, F of A를가집니다 그리고 나서 우리는 감싸 진 값, B의 F를 얻습니다 그래서 F 포장 된 값을 변환하는 함수입니다

map은 동일한 컨텍스트 내에서 변환 된 값을 반환합니다 Functor는 어떻게 작동합니까? 펑 터는 함수와 펑터를 취하고, 새로운 펑터를 반환합니다 그래서 여기서 플러스 3이 함수라는 것을 알 수 있습니다 그러면 Functor가 생깁니다이 경우 Option

Some (2)입니다 그리고 새로운 펑터를 반환합니다 그래서 OptionSome (2)에서 연산을 수행하면 3, 그것은 우리에게 Some (5)를 줄 것이다 그래서 Some (5)는 새로운 functor입니다

맵 기능에 의해 제공됩니다 따라서 Functor에서 먼저 값은 컨텍스트에서 풀립니다 그런 다음 3을 더한 함수가 적용됩니다 결과 값은 같은 맥락에서 배치됩니다 그래서 이것은 일부 부분에서는 잘 작동합니다

이제 Option에 포함 된 None 부분이 있습니다 지금까지 함수 자체는 전혀 적용되지 않습니다 오른쪽에서 코드를 볼 수 있습니다 옵션 없음을 사용합니다 함수에 3을 더하고 싶습니다

그래서 함수는 적용되지 않습니다 결과 출력은 None입니다 그런 다음 Functor를 배열에 적용합니다 따라서 각 추가 된 값에 대해 함수가 적용되고, 우리는 새로운 가치 배열을 얻습니다 그런 다음 함수에 적용된 펑터 – 그래서 여기에서 우리는 functor 자체가 함수라는 것을 알 수 있습니다

먼저 주어진 값에서 우리는 함수를 적용합니다 즉 주어진 값은 10이므로 우리는 더하기 2를합니다 그것은 우리에게 12를줍니다 그런 다음 함수에 3을 더한 함수를 적용하여 15를 얻습니다 그런 다음 Functor는 Option, Either, Try 또는 모든 데이터 유형으로 작업하고, Functor의 인스턴스를 제공합니다

여기서 addOne을 볼 수 있습니다 Type 종류의 매개 변수를 취합니다 그래서 모든 클래스는 Option, Try, 여기에서 사용할 수있는 Functor 인스턴스를 제공하십시오 여기 구체적인 구현을 할 때 볼 수 있습니다 이걸 Option과 Try로 – 그래서 옵션 (1)의 경우, 플러스 1 기능을 수행합니다

그런 다음 Some (2)로 출력합니다 그런 다음 Try를 사용하여 동일한 작업을 수행 할 때 Try (1)을 사용하면 1 Success (2)를 제공합니다 마찬가지로, 사람들은 커스텀 펑터를 만들 수 있습니다 그러나 그들은 일정한 규칙을 따라야합니다 규칙은 구성 및 신원과 같습니다

그래서 당신은 명심해야합니다 당신의 펑터를 만드는 동안 그래서 Applicative– Applicative가 사용되었습니다 Apply를 사용하여 랩핑 된 값에 랩핑 된 함수를 적용합니다 여기에서 함수 a가 더하기 3과 같은 것을 볼 수 있습니다

또한 값에 싸여 있습니다 그리고 우리는 감싸 진 값 Some (2)를가집니다 따라서 래핑 된 함수를 값에 적용합니다 일부는 (2) Apply를 사용하고 결과는 Some (5)입니다 애플리케이터가 어떻게 작동하는지 – 우리는 문맥 안에 포장 된 함수를 가지고있다

우리는 맥락에서 가치가 있습니다 우리는 둘 다 unwrap하고 값에 함수를 적용합니다 그리고 우리는 맥락에서 새로운 가치를 부여합니다 그래서 응용 프로그램을 값 배열에 적용합니다 그래서 함수에 2와 3을 곱하면, 우리는 펑터처럼 적용 할 것입니다

각 배열 요소에 적용 해 보겠습니다 새로운 배열 요소 목록을 얻습니다 따라서 Applicative Builder로 알려진 개념이 있습니다 당신은 다른 Option 타입을 통해 그것을 묶어서 계산할 것이고, 일부 계산을 수행합니다 여기 예제에서 볼 수 있습니다

Employee라는 클래스가 있습니다이 클래스에는 세 가지 속성이 있습니다 ID, 이름 및 doj 그리고 우리는 Option 타입의 변수를 가지고 있습니다 다른 옵션 유형 – 하나는 UUID, 하나는 String, 하나는 Integer입니다

따라서 이러한 속성 값을 유지하는 데 사용됩니다 그래서 우리는지도에 Applicative와 Map을 사용합니다 모든 변수 값 [INAUDIBLE] Employee의 속성으로 Applicative Builder에 대한 USP는 다음과 같습니다 유형, 컴퓨팅 할 때의 정보를 보존한다는 것 다른 Option 유형을 넘어서 그리고 모든 값이 완료되면 콜백이 호출됩니다

값이 Some 일 때 발생합니다 값 중 하나가 없음이면 출력이 없음으로 표시됩니다 없음에서 작동하지 않습니다 따라서 모나드 – 모나드는 싸인 된 값을 적용합니다 flatMap을 사용하여 랩핑 된 값을 리턴하는 함수

여기서는 half라는 함수가 있습니다 따라서 반은 의견을 제시합니다 그리고 그 수가 짝수라면 그것의 절반을 돌려 줄 것입니다 그것이 4이면, Some (2)를 줄 것입니다 짝수가 아니면 None을 반환합니다

그래서 절반은 모나드를 반환하는 함수입니다 그리고 우리는 감싸 진 값인 Some (3)을가집니다 flatMap을 사용하여 반으로 적용합니다 따라서 3이 짝수가 아니기 때문에 반은 None을 반환합니다 4는 짝수이므로 절반은 랩된 값을 반환합니다

그 일부입니다 (2) 우리가 None 연산을 위해 똑같은 것을하려고 할 때, 그것은 아무 것도주지 못할 것이다 이미 말했듯이, 모든 작업은 일부와 작동합니다 없음으로는 작동하지 않습니다 Monad는 어떻게 작동합니까? Monad는 모나드와 모나드를 반환하는 함수를 취하고, 그리고 나서 모나드를 반환합니다

그래서 Some (3)은 모나드라는 것을 알 수 있습니다 함수 half는 함수이고, 모나드를 반환합니다 그리고 마지막 결과는 None입니다 그 자체는 모나드입니다 Monad Chaining도 가능합니다

여기서 볼 수 있습니다 절반은 3 번 호출됩니다 값은 Some (20)입니다 그래서 처음으로 반은 참여하게되고, 그것은 어떤 것을 줄 것이다 (10); 두 번째 시간, 일부 (5); 세번째, 없음 모나드 바인딩은 다음과 같은 프로세스입니다

다른 Option 유형을 결합하는 데 사용됩니다 따라서 Option 유형은 flatMap을 사용하여 결합 할 수도 있습니다 그러나 계산이 증가하고 복잡성이 커집니다 따라서이를 방지하기 위해 Monad 바인딩을 사용합니다 따라서 Monad 바인딩에서 bind 메소드는 내부적으로 flatMap을 호출합니다

그러나 성능 집약적 인 방식으로 수행합니다 그래서 우리는 세 가지 옵션을 결합한 것을 볼 수 있습니다 정수 값을 갖는 타입 그리고 결과로, 모나드 바인딩 후에, 또한 Option 유형입니다 그래서 Functor, Applicative, 및 Monad

Functor의 모든 참여자는 Applicative에서 가능합니다 그리고 Applicative의 모든 기여자들 Monad에서도 가능합니다 따라서 더 많은 기능 프로그래밍 개념이 있습니다 첫 번째는 기능 구성입니다 그 이름에서 알 수 있듯이 작곡 기존 함수에서 함수를 작성합니다

그래서 고정 기능으로 작성하십시오 고정 된 의미로, 함수 이름 두 이름 사이 그리고 그것은 그들이 왼쪽과 오른쪽 매개 변수라고 가정합니다 해당 함수에 적용됩니다 이렇게 구성된 함수는 오른쪽에서 가치를 얻습니다

왼쪽에 적용하고 계속합니다 그것이 최종 결과를 얻을 때까지 그래서 여기에서 당신은 볼 수 있습니다, 두 가지 기능이 있습니다 심지어 더 커졌습니다 그리고 그들에 대한 작품을 작곡합니다

따라서 Compose는 우선 짝수 기반 목록을 필터링합니다 둘째로, 그 결과를 더 큰 수조로 전달할 것입니다 그런 다음 greaterThanThousand를 기준으로 목록을 필터링합니다 배관 – 배관은 Compose의 반대입니다 왼쪽에서 시작하여 계속 적용합니다

오른쪽의 모든 것 그래서이 경우에는 이것이 동일한 예입니다 거기에 Compose가있었습니다 이 경우 먼저 목록을 평가합니다 더 많은 것을 위해

그리고 그 결과가 무엇이든간에 그 결과를 짝수에게 제공 할 것입니다 논리적 구성 요소 – 함수에서 작동합니다 부울 형식을 반환하고이를 부인합니다 그래서 여기에 모든 정수의 함수가 있음을 알 수 있습니다 0보다 큽니다

다시 말하면, 임대인 기능은 보완법을 기반으로합니다 이전 기능의 즉, 그것은 0보다 작은 모든 사람들을 찾을 것입니다 컴포넌트 함수는 보완 물을 찾는 데 사용됩니다 특정 기능의 그럼 우리는 목록을 가지고 있습니다 목록을 출력하면 1에서 5까지 모든 숫자를 더 많이 얻는다

남은 숫자는 그보다 훨씬 적습니다 암기는 순수 함수의 예비를 캐시하는 데 사용됩니다 우리 모두 알다시피 순수 함수 항상 동일한 입력에 대해 동일한 출력을 반환합니다 그래서 우리가 [INAUDIBLE] 함수를 캐시한다면 – 캐시 순수 함수 결과, 그것은 우리에게 도움이 될 것입니다 우리는 같은 계산을 여러 번 수행 할 필요가 없습니다

함수를 외우고 계산 결과를 저장합니다 그것에 적용된 매개 변수에 그렇다면 Arrow를 기존 Android와 어떻게 통합 할 수 있습니까? 스튜디오 프로젝트? 종속성을 추가해야합니다 이것은 의존성 목록입니다 GitHub 사이트에 나열됩니다

필요한 모든 클래스와 함수를 기반으로, 적절한 종속성을 가져와야합니다 이것은 간단한 계산기 앱입니다 두 개의 operants를 취하고, 더하기, 빼기, 곱하기, 나누기 그래서 데이터를 통합 할 수있는 유스 케이스였습니다 유형 개념

그래서 여기에 Add, Add operation, you 또한 모나드 바인딩을 결합 할 수 있습니다 유사한 유형의 옵션 여기서는 나누기 위해 Try 데이터 형식을 사용했습니다 왜냐하면 제수가 0 일 가능성이 있기 때문입니다 따라서 제수가 0이면 실패가 발생합니다

예외 이름 제수가 0이 아니면 Try는 Success 봇을 실행합니다 나는 값을 얻는다 비슷하게, 곱셈은 모두 1에서 2가 2라는 것을 압니다 3에서 1은 3입니다

따라서 Some (1)에 들어가는 것은 숫자 자체가됩니다 그래서 곱셈 – 나는 그 사건을 고려했습니다 더 많은 경우가 있습니다 마찬가지로, 값이 0이면 결과는 0이됩니다 따라서 모든 Arrow 개념을 통합 할 수 있습니다

우리가 보통하는 일에 그렇다면이 앱은 이메일을 입력하는 간단한 앱입니다 구독 버튼을 누르십시오 그래서 여기에 Option 유형을 사용했습니다 따라서 입력 된 이메일이 유효한 입력 인 경우, 변수에 저장합니다 유효한 입력이 아닌 경우 None 만 저장합니다

따라서이 경우, 추가 처리, 메일 링 목록에 이메일을 추가하는 것처럼 완료되지 않습니다 따라서 입력이없는 곳에서 볼 수 있습니다 이메일 입력은 None으로 저장합니다 입력이 제공되면 값은 Some 및 값으로 저장됩니다 그런 다음 Android 용 화살표를 사용할 때의 우수 사례 – 그래서 Arrow는 새로운 도서관이자 Kotlin입니다

우리 대부분에게 새로운 것입니다 그래서 우리는 Kotlin과 Arrow를 통합 할 수 있습니다 가능한 한 우리 프로젝트에서 부작용을 단일 지점으로 푸시하려고합니다 또한, 우리는 다른 데이터에 대해 매우 확신 할 필요가 있습니다 다른 개념, 즉 데이터 유형과 유형 수업

차이점이 있습니다 우리가 어떻게 할 수 있는지 확인해야합니다 Arrow의 주어진 개념을 사용하여 프로젝트를 모델링합니다 그래서 이미 진행중인 다양한 프로젝트가 있습니다 화살표를 사용하여 완료됩니다

Helios처럼 – Helios는 Kotlin의 Arrow 용 JSON 파서입니다 그것은 화살표를 사용합니다 그런 다음 기능 유효성 검사가 있습니다 Either 및 Try 데이터를 사용하여 양식 유효성 검사 수행 유형 따라서이 링크에서 다른 프로젝트를 확인할 수 있습니다

그래서 화살을 말릴 준비가 되셨습니까? 좋아, 잘됐다 이것이 바로 프레젠테이션의 끝입니다 모두 감사합니다 모든 검색어에 대해 내 Gmail ID에 연결할 수 있습니다 고맙습니다