내용으로 건너뛰기
Introduction to Systematic Programming – Locals & Abstraction (7주차)

Introduction to Systematic Programming – Locals & Abstraction (7주차)

7주차에는 로컬 표현과 추상 표현의 개념이 모두 도입되었습니다. 저의 경우와 마찬가지로, 이번 주는 멋지고 상쾌한 다른 과정의 리뷰의 절반이었고, 그 다음에는 저를 완전히 루프에 던진 새로운 개념인 BAM이었습니다.

9min read

7주차에는 로컬 표현과 추상 표현의 개념이 모두 도입되었습니다. 저의 경우와 마찬가지로, 이번 주는 멋지고 상쾌한 다른 과정의 리뷰의 절반이었고, 그 다음에는 저를 완전히 루프에 던진 새로운 개념인 BAM이었습니다.

내 컨셉 도구 상자에 무언가를 추가하는 좋은 방법이라고 생각하기 때문에 (오래된 것을 검토 한 다음 새로운 것을 던지기) 이것에 대해 불평하지는 않지만 약간의 롤러 코스터입니다.

Lesson 1: Local Expression 소개

이번 주의 첫 번째 흥미로운 요소는 또 다른 언어 업그레이드입니다! 이제 중급 학생 언어로 넘어갑니다. 점수.

로컬 표현식에 관해서는, 이 입문 수업에서 로컬 표현식은 프로그램의 한 부분에서만 작동하는 함수와 상수를 가진 표현식이라는 것을 배웁니다. 그게 우리가 여기서 얻을 수 있는 전부입니다. 나중에 더 자세히 설명하겠습니다...

Lesson 2 : Local Expressions – 형성과 직관

우리의 삶을 Intermediate Student Language로 업그레이드하면 1과에서 모호하게 정의된 것처럼 현지 표현을 활용할 수 있는 능력을 얻을 수 있습니다. 기본적으로 로컬 표현식은 로컬 컨테이너 외부의 나머지 프로그램과 상호 작용할 수 없는 자체 함수와 변수가 있는 작고 패키지된 표현식입니다. 현지인의 해부학은 다음과 같습니다.

이 예제에서 "defines"는 모두이 로컬 컨테이너 내에만 존재하는 변수에 대한 정의이며, 즉, "a"가 프로그램의 최상위 수준, 즉,이 로컬 외부에서 참조되는 경우이 로컬 내에서 a에 대해 수행하는 모든 작업은 "a"의 다른 인스턴스에는 중요하지 않습니다. 왜? "a"가 로컬에서 사용되면 해당 로컬 내에만 존재하며 프로그램 내에있을 수있는 다른 "a"와 상호 작용하지 않기 때문입니다. 이것은 당신이 또한 당신의 모든 지역에서 "a"를 사용할 수 있다는 것을 의미하며, 당신이 당신의 로컬을 올바르게 구조화하는 한 그들 사이에 아무 일도 일어나지 않을 것입니다.

Lesson 3: Local Expressions – 어휘 범위 지정

범위 윤곽선은 로컬 정의에 액세스할 수 있는 위치에 대한 질문에 답변합니다. 어휘 범위 지정은 기본적으로 표현식이 평가되는 가장 안쪽의 닫는 영역 내에 있는 함수 또는 변수의 정의를 사용하는 것을 나타냅니다.

Lesson 4: Local Expressions – 평가 규칙

앞서 언급했듯이 locals는 표현이며 자신의 권한 밖에 있는 것에 영향을 미치지 않습니다. 평가 단계는 다음과 같습니다!

  1. 이름 바꾸기– 로컬의 정의를 가져 와서, 그에 대한 모든 참조를 찾고, 전 세계적으로 고유 한 새로운 이름을 제시하고, 이전 이름의 모든 인스턴스를 이 새롭고 고유한 이름으로 바꿉니다.
  2. Lifting– 이름이 바뀐 정의를 최상위 수준으로 이동합니다.
  3. Replace– 전체 로컬을 이름이 바뀐 정의로 본문만 바꿉니다.

이런 식으로 여러분의 지역적 표현을 평가함으로써, 여러분은 실제로 지역으로서의 존재를 제거하는 것이며, 따라서 여러분의 프로그램은 이론적으로 Basic Student Language로 작성될 수 있다는 것입니다!

Lesson 5: Local Expressions – 캡슐화

캡슐화는 프로그램의 각 부분을 가져와서 최상위 레벨의 몇 가지 작은 항목과만 상호 작용하는 작은 패키지로 변환하는 것입니다. 본질적으로, 그것은 그들 안에 현지인들과 함께 단일 기능을 만들고 있습니다. 함수를 캡슐화할 때는 더 이상 전역적으로 액세스할 수 없다는 점을 기억하는 것이 중요합니다. 그러나 이것은 또한 캡슐화 된 함수로서 서명과 테스트를 작성할 필요가 없으므로 많은 시간을 절약 할 수 있음을 의미합니다. 그러나 여전히 테스트하고 싶을 수 있으므로 테스트하는 것을 잊지 마십시오!

함수가 캡슐화에 적합한 후보인지 어떻게 알 수 있습니까? 잘....

  • 밀접하게 연결된 도우미와 함께 하나의 기능으로 존재합니까?
  • 외부 프로그램은 실제로 도우미가 아닌 하나의 main function 만 호출하면됩니까?

이 두 가지 모두에 '예'라고 답했다면 캡슐화를 위한 훌륭한 후보를 찾고 있을 가능성이 높습니다!

How do you encapsulate a function?

  1. 함께 캡슐화하려는 모든 함수를 그룹화합니다.
  2. 새 전역 함수 이름과 필요한 매개 변수를 사용하여 정의를 엽니다.
  3. local 표현식을 연 다음 원래 함수 정의 바로 앞에 있는 local with [의 정의 부분을 엽니다.
  4. 원래 함수 정의 뒤에 ]가 있는 정의 부분을 닫습니다.
  5. 로컬에 정의된 함수의 트램폴린 호출을 끝에 추가합니다.
  6. 불필요한 테스트, 서명 및 스텁을 삭제합니다.
  7. 테스트 및 필요한 스텁의 이름을 바꿉니다.
  8. RUN FREE! YOU GOT IT!

템플릿에 캡슐화를 포함할 수 있다는 점도 중요하지만, 이렇게 하면 기본 케이스를 테스트할 수 없다는 점을 명심해야 합니다.

이 단원의 추가 참고 사항:

이 단원에서 다루는 또 다른 주제는 프로그램의 동작을 변경하지 않는 프로그램의 구조적 변경인 리팩토링입니다. 그러나 무언가를 리팩토링하고 동작을 변경할 수도 있지만 이러한 두 가지 변경을 동시에 수행하는 것은 권장하지 않습니다(한 번에 너무 많은 작업을 수행하려고 하면 실수를 저지르기 쉽습니다!).

Lesson 6: Local Expressions – 재계산 피하기

드디어 이 수업에서 코드 효율성의 개념에 도달했습니다. 예호! 이 수업은 프로그램이 작동한 후 코드의 효율성에 대해 걱정해야 한다는 생각으로 시작합니다. 어떤면에서는 특히 초보자에게 이것에 동의하지만 약간 동의하지 않습니다. 코드 효율성은 코딩 커리어를 시작할 때부터 뿌리를 내려야 한다고 생각하기 때문에 나중에 생각해보는 것이 아니라 자연스러운 사고 방식이 되어야 합니다. 즉, 이 수업은 기하급수적 성장을 제거하는 데 중점을 둡니다. 본질적으로, 여기의 해결책은 매우 상황에 따라 다르므로 너무 많이 들어가고 싶지는 않습니다. 그러나 요점은 arity 트리로 작업할 때 검색을 현지화할 수 있다면 코드를 더 간결하고 효율적으로 만들 수 있다는 것입니다. J

Lesson 7: Introduction to Abstraction

프로그래밍에서 추상화는 프로그램의 복잡성을 관리하는 방법입니다. #IAbstractedThatLessonForYou

Lesson 8: Abstraction from Examples, Part 1 (예제로부터의 추상화, 1부)

추상화할 때 함수의 공통 부분을 추상 함수로 끌어내야 합니다. (참고: 서로 다른 부분을 "분산 지점"이라고 합니다.)

함수에서보다 일반적인 이름으로 이름을 바꾸고, 분산 점을 나타내는 매개 변수를 넣고, 분산 점을 이름을 바꾼 매개 변수로 바꿉니다 (모든 재귀에서도 매개 변수를 전달해야합니다!).

함수를 추상화하려는 이유는 무엇입니까?

잘!

고차 함수는 둘 이상의 함수를 사용할 수 있습니다. 또한 함수를 생성할 수 있습니다.

그러니 익숙해지십시오. 더 좋아. 약속.

9단원: 예제의 추상화, 2부

Lesson 9는 대부분 Lesson 8의 계속된 예제를 통해 작동하므로 평소와 같이 작동하고 예제 실행을 제거하고 중요한 요점을 제공하겠습니다.

  1. 함수는 다른 함수를 인수로 사용할 수 있습니다.
  2. 추상화는 대부분의 프로그래밍 언어에서 존재하며 작동합니다.
  3. 추상화의 경우 목적 진술서를 작성하기가 매우 어렵으므로 연습을 시작하십시오.

Lesson 10: 예제로부터의 추상화, Part 3

서명을 작성하는 것은 추상화를 할 때 마지막에 오는데, 이는 목적 진술서를 작성하는 것보다 훨씬 더 어렵기 때문입니다. 이를 통해 작업하는 방법에 대한 팁은 다음과 같습니다.유형 추론을 사용하십시오! 타입 추론은 다음과 같이 진행됩니다.

  1. 함수가 생성하는 가장 기본적인 것, 즉 서명의 결과가되는 것을 찾으십시오.
  2. 전달되거나 필요한 인수를 찾습니다. 이는 서명에 대한 인수 유형입니다.

말은 쉬워 보이지만 추상화에는 너무 많은 일이 일어나고 있어 꽤 당황스러울 수 있습니다. 낙담하지 말고, 전체 디자인 레시피 이론과 마찬가지로 작업 중인 작업을 단순화하는 데 집중하면 괜찮을 것입니다.

이 단원의 추가 참고 사항:

  1. 함수가 인수로 전달되면 더 큰 서명의 ()에 해당 서명을 작성합니다.
  2. 목록은 다른 방법으로 작성할 수 있습니다. 이제 ListOfX 대신 (listof X)를 사용할 수 있습니다.

Lesson 11: Built-In Abstract Functions 사용

Map과 Filter는 가장 일반적으로 사용되는 두 가지 내장 추상 함수이며, Coursera 과정의 언어 페이지에는 이 모든 기능이 나열되어 있습니다. (coursera 수업을 듣지 않는 경우 동일한 정보로 확인할 수 있는 외부 링크가 있습니다. BSL Built-In Abstract Functions.)

내장된 초록은 꽤 달콤하며, 현실은 꽤 일반적인 느낌이라면 당신의 직감을 신뢰하고 목록을 확인하십시오 – 아마도 내장되어 있을 것입니다!

Lesson 12: Closures

때로는 추상 함수에 인수로 전달하는 함수가 아직 존재하지 않는 경우가 있습니다 .... 이 경우 항상 로컬로 정의할 수 있습니다.

HOWEVER

선택할 수 없는 경우도 있습니다. 중지하고 정의해야 합니다.

언제입니까?

추상 함수에 전달하려는 함수의 본문이 외부 함수의 매개 변수를 참조하는 경우. 따라서 외부 함수의 함수 정의는 내부 함수를 AROUND로 닫아 클로저로 만듭니다. (어휘 범위 지정을 기억하십니까? 네!)

Lesson 13: 추상 폴드 함수(Abstract Fold Functions)

이 수업은 템플릿에서 추상 함수로 바로 이동하는 방법에 대한 간략한 개요를 제공하며, 말 그대로 중간에 있는 모든 끈적한 부분을 잘라내고 코드 작성 시간을 최적화하는 방법을 제공합니다. 야호. 요컨대, fold 함수는 템플릿을 직접 기반으로 하는 추상 함수입니다.

Week 7 Summary

처음에 언급했듯이 이 수업은 후반부에 정말 재미있었습니다. 추상 함수와 관련된 자신 만의 팁이나 트릭이 있으면 알려주십시오! 또한! 8주차는 수업의 마지막 주이므로 다음 블로그는 시리즈의 마지막 주가 될 것입니다. 그래도 걱정하지 마세요, 저는 다가오는 항목에 대한 많은 계획이 있습니다.

데모 요청