2017-08-30 독서노트(함수식 프로그래밍의 Pointfree)

2795 단어
오늘 본 것은 함수식 프로그래밍과 관련된 글입니다. 이전에 함수식 프로그래밍을 접한 적이 없지만 우리가 글을 읽는 것을 막을 수는 없습니다.
이 글은 Pointfree Javascript입니다.
우선 제목의 뜻을 먼저 이해하고 완일봉의 블로그에서 이걸 찾았을 거예요.
Pointfree: 처리할 값을 사용하지 않고 연산 프로세스만 작성합니다.중국어는'무치'풍격으로 번역할 수 있다.
문장은 처음에 두 단락의 코드를 던졌는데 코드는 다음과 같다.
// imperative style
var getAdminEmails = function(users) {
  var emails = [];
  for (var i = 0; i < users.length; i++) {
    if (users[i].role === 'admin') {
      emails.push(users[i].email);
    }
  }
  return emails;
}
var getAdminEmails = users =>
    users
      .filter(u => u.role === 'admin')
      .map(u => u.email);

여러분은 이 두 단락의 코드의 차이를 생각해 보셔도 됩니다.
첫 번째 코드의 논리는 우리 대다수 사람들이 코드를 쓸 때 사용하는 것이다. 먼저 빈 그룹을 성명한 다음에 하나하나 비교하는 것이admin의 신분이 아니냐는 것이다.만약 그렇다면 이 메일박스를 말하고 수조에 넣으세요.마지막으로 그룹을 되돌려줍니다.
두 번째 코드의 논리는 정상적인 사유 논리에 따라 쓴 것이다.이것은 먼저 모든user를 가져간 다음에 js의 원생 Filter를 사용하여 모든role가admin의user임을 꺼내고, 마지막으로user의 이메일을 되돌려줍니다.
두 번째 코드의 스타일 중 하나는 함수의 코드가 함수에 더 가깝다는 것이다.이것은 그것으로 하여금 더욱 쉽게 이해하고 이해하게 한다.다른 사람들이 당신이 쓴 새로운 코드를 연구할 때, 무엇을 썼는지, 프로그램을 실행할 때 무슨 일이 일어났는지 빠르게 이해할 수 있다.
그러나 이 두 번째 코드는 Pointfree가 최종적으로 얻으려고 하는 코드가 아니어서 작가가 최종적으로 원하는 코드를 얻으려고 하는 사고 과정을 첨부했다.
작가가 생각해 봤는데, 가장 좋은 것은 내가 이 함수를 성명하기만 하면 결과를 얻을 수 있다는 것이다.
var getAdminEmails = compose(getTheEmailsOf, onlyTheAdminRoleUsers);

그래서 작가는 이 두 함수를 실현하기 시작했고 최종 결과는 이렇다.
저자는 먼저 대체적으로 어떤 기본 방법을 사용해야 하는지를 소개했다.(그중에서compose와map은 원생적인 방법이 있지만 작가는 대체적으로 소개하고 싶을 뿐)
var compose = (f, g) => x => f(g(x));

var prop = p => x => x[p];

var map = f => list => list.map(f);

// which lead to:
var getTheEmailsOf = map(prop('email'));

그 다음은 한층 더 봉인된 것이다.
var propEq = v => p => obj =>
  prop(p)(obj) === v;

var filter = f => list =>
  list.filter(f);

var onlyTheAdminRoleUsers =
  filter(propEq('admin')('role'));

마지막으로 필요한 함수의 성명입니다.
var getAdminEmails = compose(
  map(
    prop('email')),
  filter(
    propEq('admin')('role')));

이른바 Pointfree 프로그래밍이나 tacit 프로그래밍이다.이 판본은 완전히 다른 비교적 작고 복용 가능한 기능으로 구성되어 있다.이러한 기능들은 우리가 다음 기능을 신속하게 완성하는 데 도움을 줄 뿐만 아니라, 모든 기능을 더욱 빨리 이해하는 데도 도움을 줄 수 있다.프로프 함수가 무엇인지 알면 프로프('something')가 obj=>obj보다 낫다고 느낄 것이다.something, 많이 이해했어.

총결산


Pointfree 프로그래밍은 비교적 작고 통용적이며 정의가 양호하고 테스트를 거친 기능을 조합하여 필요한 기능을 구축하여 프로그래밍하는 방법이다.
임시 변수도 걱정할 필요가 없다. 왜냐하면 그는 코드를 더욱 쉽게 이해하고 오류를 도입하기 어렵기 때문이다.또한 코드의 단락이 비교적 작기 때문에 이해하기 쉽고 테스트하기 편리하여 더욱 믿을 만하다.
물론 이것은 만금유가 아니다. 왜냐하면 완전히 무관한 기능이 존재할 때가 많기 때문이다.나는 그것의 주요 약점은 함수가 여러 개의 매개 변수를 가지고 있을 때에 있다는 것을 발견했다.대부분의 non Pointfree 코드가 생성되는 경우가 많습니다.그러나 전체적으로 보면 폐단보다 이익이 많다.

좋은 웹페이지 즐겨찾기