* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download function
Survey
Document related concepts
Scala (programming language) wikipedia , lookup
Logic programming wikipedia , lookup
C Sharp syntax wikipedia , lookup
Join-pattern wikipedia , lookup
One-pass compiler wikipedia , lookup
Go (programming language) wikipedia , lookup
Control flow wikipedia , lookup
Object-relational impedance mismatch wikipedia , lookup
Programming language wikipedia , lookup
Standard ML wikipedia , lookup
Interpreter (computing) wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Reactive programming wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Object-oriented programming wikipedia , lookup
Structured programming wikipedia , lookup
Transcript
The secret of Functional Programming revealed! What we have heard.. • In Functional Programming you only use functions! o So no classes or objects..? What we have heard.. • In Functional Programming you have no variables! Functional Programming seems like a couple of steps backwards.. "Functional Languages are at a higher level of abstraction than object-oriented languages. Though they are more difficult to understand, you can express bigger ideas with less code." Bruce A. Tate Seven Languages in Seven Weeks Why FP is incredible! • Reduces bugs o easier to test o easier to trust • More compact code o no variables • More elegant o closer to mathematics o proofs of correctness And the multi-core hype... • Functional Programming promises to make concurrent and parallell programming easier Language differ in their support of Functional Programming Key Concept Referential transparency: A function always returns the same result, as long as the same arguments are passed into it. No side effects! The purpose of a function is to do nothing other than return a result. • • • • No variables must change (be mutated) No visible effects (dialog box, "bing", etc.) No access of external data (files, keyboard, etc.) No reference to variables defined elsewhere Functional programmers say side effects makes your code dirty! The technical term: Imperative code Imperative code is the opposite of functional code (What about OOP?) Euler problem #1: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. Imperative solution.. static int Solution(int limit) { int sum = 0; for (int i = 1; i < limit; i++) { if (i % 3 == 0 || i % 5 == 0) { sum += i; } } return sum; } Recursive solution.. static int Solution(int limit) { if (limit == 0) return 0; int c = limit - 1; if (c % 3 == 0 || c % 5 == 0) { return c + Solution(c); } else { return Solution(c); } } Using Linq.. static int Solution(int limit) { return Enumerable.Range(1, limit - 1) .Where(i => i % 3 == 0 || i % 5 == 0) .Sum(); } Learn to love starting functions with return! FP is insane! "All you can do without side effects is push a button and watch the box get hot for a while." Simon Peyton Jones So what's the secret? There must be some kind of magic that makes you able to implement "normal" programs.. Or..? The Philosophy of FP You should break your program into two parts: • The biggest part: o Completely functional, free of side effects o This is the clean part! • The smaller part: o Has all the side effects o Interacts with the user / rest of the world o This is the dirty part! A program like this is written in a functional style. (Compare to MVC) Getting started with FP • Start using System.Linq for everything: Where (a.k.a. filter / select) Select (a.k.a. map / project) Aggregate (a.k.a. fold / reduce) SelectMany (a.k.a. mapcat) • Practice the clean/dirty separation rules o o o o • If time, learn a FP language, then take what you've learned back