Tôi nghĩ toán tử chuyển tiếp ống của F # ( |>
) nên so với ( & ) trong haskell.
// pipe operator example in haskell
factorial :: (Eq a, Num a) => a -> a
factorial x =
case x of
1 -> 1
_ -> x * factorial (x-1)
// terminal
ghic >> 5 & factorial & show
Nếu bạn không thích &
toán tử ( ), bạn có thể tùy chỉnh nó như F # hoặc Elixir:
(|>) :: a -> (a -> b) -> b
(|>) x f = f x
infixl 1 |>
ghci>> 5 |> factorial |> show
Tại sao infixl 1 |>
? Xem tài liệu trong Data-Function (&)
infixl = infix + liên kết trái
infixr = infix + liên kết đúng
(.)
( .
) có nghĩa là thành phần chức năng. Nó có nghĩa là (fg) (x) = f (g (x)) trong Toán học.
foo = negate . (*3)
// ouput -3
ghci>> foo 1
// ouput -15
ghci>> foo 5
nó bằng
// (1)
foo x = negate (x * 3)
hoặc là
// (2)
foo x = negate $ x * 3
( $
) toán tử cũng được xác định trong Data-Function ($) .
( .
) được sử dụng để tạo Hight Order Function
hoặc closure in js
. Xem ví dụ:
// (1) use lamda expression to create a Hight Order Function
ghci> map (\x -> negate (abs x)) [5,-3,-6,7,-3,2,-19,24]
[-5,-3,-6,-7,-3,-2,-19,-24]
// (2) use . operator to create a Hight Order Function
ghci> map (negate . abs) [5,-3,-6,7,-3,2,-19,24]
[-5,-3,-6,-7,-3,-2,-19,-24]
Chà, Ít (mã) thì tốt hơn.
So sánh |>
và.
ghci> 5 |> factorial |> show
// equals
ghci> (show . factorial) 5
// equals
ghci> show . factorial $ 5
Nó là sự khác biệt giữa left —> right
và right —> left
. ⊙﹏⊙ |||
Nhân hóa
|>
và &
tốt hơn.
bởi vì
ghci> sum (replicate 5 (max 6.7 8.9))
// equals
ghci> 8.9 & max 6.7 & replicate 5 & sum
// equals
ghci> 8.9 |> max 6.7 |> replicate 5 |> sum
// equals
ghci> (sum . replicate 5 . max 6.7) 8.9
// equals
ghci> sum . replicate 5 . max 6.7 $ 8.9
Làm thế nào để lập trình chức năng trong ngôn ngữ hướng đối tượng?
vui lòng truy cập http://reactivex.io/
Hỗ trợ IT :
- Java: RxJava
- JavaScript: RxJS
- C #: Rx.NET
- C # (Unity): UniRx
- Scala: RxScala
- Clojure: RxClojure
- C ++: RxCpp
- Lua: RxLua
- Ruby: Rx.rb
- Python: RxPY
- Đi: RxGo
- Groovy: RxGroovy
- JRuby: RxJRuby
- Kotlin: RxKotlin
- Swift: RxSwift
- PHP: RxPHP
- Elixir: reaxive
- Dart: RxDart
&
là của Haskell|>
. Chôn sâu trong chủ đề này và tôi mất vài ngày để khám phá. Tôi sử dụng nó rất nhiều, bởi vì bạn tự nhiên đọc từ trái sang phải để làm theo mã của bạn.