點燈坊

失くすものさえない今が強くなるチャンスよ

使用 concat() 合併兩個 String

Sam Xiao's Avatar 2019-07-06

實務上常遇到將 2 個 String 合併成單一 String,Ramda 提供了 concat()

Version

macOS Mojave 10.14.5
VS Code 1.35.1
Quokka 1.0.227
Ramda 0.26.1

Imperative

let first = 'Java';
let second = 'Script';

// concat :: String -> String -> String
let concat = str1 => str2 => str1 + str2;

concat(first)(second); // ?

建立 concat(),可直接使用 + 將兩 string 合併。

concat004

String.prototype.concat()

let first = 'Java';
let second = 'Script';

// concat :: String -> String -> String
let concat = str1 => str2 => str1.concat(str2);

concat(first)(second); // ?

String.prototype 內建 concat(),直接傳入 data 即可。

就功能而言兩者都一樣,但 String.prototype.concat() 屬 OOP 風格,為 data 的 method,而 concat() 為 FP 風格,data 以 argument 傳入 function,且為最後一個 argument,方便 point-free

concat005

Ramda

import { concat } from 'ramda';

let first = 'Java';
let second = 'Script';

concat(first)(second); // ?

事實上 Ramda 已經內建 concat(),可直接使用。

concat()
String → String → String
將兩個相同結構的 array 合併成單一 array

[a]:第一個 string

[a]:第二個 string

[a]:回傳合併後的 string

concat006

Conclusion

  • concat() 不只能用在 string,也能用在 array
  • Ramda 的 concat() 其實很簡單,且 array 與 string 都能用,也展現了 function 與 data 分離後,不再只是單一型別的 method,可套用在不同型別上

Reference

MDN, concat()
Ramda, concat()