“First-class functions are a natural fit with OO, as evidenced by their presence in OO languages that aren't glorified PDP...
Hva er en lambda?<br />
En anonym funksjon<br />definert med en konsis syntaks.<br />
Hva er en anonym funksjon?<br />
En funksjon som defineres og kan kalles uten å bli bundet til noe navn.<br />
Har du et eksempel?<br />
x, y => x + y;<br />
Hvor kan lambdaer brukes?<br />
Der man venter en delegate-instans.<br />
varadd = x, y => x + y; ?<br />
Nei.<br />
Hvorfor ikke?<br />
C#-kompilatoren skjønner ikke hva slags type x og y har.<br />
Hvordan kan lambdaer brukes da?<br />
delegateint Lambda(int x, int y);<br />…<br />Lambda add = x, y => x + y;<br />…<br />add(2, 5);<br />
Må man definere slike delegates?<br />
Nei.<br />
Hva er Func, Predicate og Action?<br />
Innebygde delegate-typer.<br />
Func<int, int, int> add<br />	= x, y => x + y;<br />…<br />add(2, 5);<br />
Func<string, string, string> add<br />	= x, y => x + y;<br />…<br />string msg = add(“Hello”, “World”);<br />Console.Write...
Predicate<string> tenChars<br />	= s => s.Length() == 10;<br />…<br />if (tenChars(myStr)) { … }<br />
Action<Exception> log = e => {<br />Console.WriteLine(e.Message);<br />throw e;<br />}<br />…<br />catch (Exception e) { l...
Hvorfor lambdas?<br />
Bruk-og-kast-funksjoner!<br />
Hva er en closure?<br />
En førsteklasses funksjon som er lukket med hensyn på sine frie variable.<br />
Unnskyld?<br />
En førsteklasses funksjon <br />+<br />dens omgivelse i kjøretid.<br />
Hva er en closure?<br />
void AddToLines(List<string> lines)<br />{<br />   Action<string> add = <br />s => lines.add(s);<br />  for (var node in _...
Hva er en førsteklasses funksjon?<br />
En som kan behandles som data.<br />
Er lambda og closure det samme?<br />
Nei.<br />
Hva er forskjellen?<br />
En lambda er en anonym funksjon definert med en konsis syntaks.<br />En closure er en førsteklasses funksjon som er lukket...
Det har du sagt før.<br />
En closure oppstår ved evalueringen av en lambda.<br />
Hvorfor closures?<br />
Funksjoner som data.<br />
Hvordan er closures implementert?<br />
Som funksjonsobjekter.<br />
Hvordan er lambdas implementert?<br />
Ved hjelp av closures!<br />
Hva kan man bruke dette til?<br />
Event-håndtering.<br />
var msg = “You clicked me!”;<br />button.Click += <br />s, e => MessageBox.Show(msg);<br />
Strategy-pattern.<br />
List<Person> people = …;<br />people.Sort((x, y) => {<br />   if (x.Age > y.Age) return 1;<br />   if (x.Age < y.Age) retu...
Funksjoner av høyere orden.<br />
IEnumerable<Person> people = …;<br />int limit = 18;<br />if (people.All<Person>(p => p.Age >= limit)) <br />{<br />Messag...
LINQ.<br />
from p in people<br />where p.Age > 18<br />select p.Name;<br />
people<br />   .Where<Person>(p => p.Age > 18)<br />   .Select<Person, string>(p => p.Name);<br />
Hva nå?<br />
Til kamp mot løkkene!<br />
Og hvis jeg er ordentlig sprø?<br />
Les om Y-kombinatoren.<br />
Lyntale om lambda
Upcoming SlideShare
Loading in …5
×

Lyntale om lambda

757 views
682 views

Published on

Intro til lambda-uttrykk og closures i C#

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
757
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lyntale om lambda

  1. 1. “First-class functions are a natural fit with OO, as evidenced by their presence in OO languages that aren't glorified PDP-11 assemblers with some OO stuff bolted on their side.”<br />- Reg Braithwaite<br />
  2. 2. Hva er en lambda?<br />
  3. 3. En anonym funksjon<br />definert med en konsis syntaks.<br />
  4. 4. Hva er en anonym funksjon?<br />
  5. 5. En funksjon som defineres og kan kalles uten å bli bundet til noe navn.<br />
  6. 6. Har du et eksempel?<br />
  7. 7. x, y => x + y;<br />
  8. 8. Hvor kan lambdaer brukes?<br />
  9. 9. Der man venter en delegate-instans.<br />
  10. 10. varadd = x, y => x + y; ?<br />
  11. 11. Nei.<br />
  12. 12. Hvorfor ikke?<br />
  13. 13. C#-kompilatoren skjønner ikke hva slags type x og y har.<br />
  14. 14. Hvordan kan lambdaer brukes da?<br />
  15. 15. delegateint Lambda(int x, int y);<br />…<br />Lambda add = x, y => x + y;<br />…<br />add(2, 5);<br />
  16. 16. Må man definere slike delegates?<br />
  17. 17. Nei.<br />
  18. 18. Hva er Func, Predicate og Action?<br />
  19. 19. Innebygde delegate-typer.<br />
  20. 20. Func<int, int, int> add<br /> = x, y => x + y;<br />…<br />add(2, 5);<br />
  21. 21. Func<string, string, string> add<br /> = x, y => x + y;<br />…<br />string msg = add(“Hello”, “World”);<br />Console.WriteLine(msg);<br />
  22. 22. Predicate<string> tenChars<br /> = s => s.Length() == 10;<br />…<br />if (tenChars(myStr)) { … }<br />
  23. 23. Action<Exception> log = e => {<br />Console.WriteLine(e.Message);<br />throw e;<br />}<br />…<br />catch (Exception e) { log(e); }<br />
  24. 24. Hvorfor lambdas?<br />
  25. 25. Bruk-og-kast-funksjoner!<br />
  26. 26. Hva er en closure?<br />
  27. 27. En førsteklasses funksjon som er lukket med hensyn på sine frie variable.<br />
  28. 28. Unnskyld?<br />
  29. 29. En førsteklasses funksjon <br />+<br />dens omgivelse i kjøretid.<br />
  30. 30. Hva er en closure?<br />
  31. 31. void AddToLines(List<string> lines)<br />{<br /> Action<string> add = <br />s => lines.add(s);<br /> for (var node in _graph.Nodes)<br /> { <br /> add(node.ToString()); <br /> }<br />}<br />
  32. 32. Hva er en førsteklasses funksjon?<br />
  33. 33. En som kan behandles som data.<br />
  34. 34. Er lambda og closure det samme?<br />
  35. 35. Nei.<br />
  36. 36. Hva er forskjellen?<br />
  37. 37. En lambda er en anonym funksjon definert med en konsis syntaks.<br />En closure er en førsteklasses funksjon som er lukket med hensyn på sine frie variable.<br />
  38. 38. Det har du sagt før.<br />
  39. 39. En closure oppstår ved evalueringen av en lambda.<br />
  40. 40. Hvorfor closures?<br />
  41. 41. Funksjoner som data.<br />
  42. 42. Hvordan er closures implementert?<br />
  43. 43. Som funksjonsobjekter.<br />
  44. 44. Hvordan er lambdas implementert?<br />
  45. 45. Ved hjelp av closures!<br />
  46. 46. Hva kan man bruke dette til?<br />
  47. 47. Event-håndtering.<br />
  48. 48. var msg = “You clicked me!”;<br />button.Click += <br />s, e => MessageBox.Show(msg);<br />
  49. 49. Strategy-pattern.<br />
  50. 50. List<Person> people = …;<br />people.Sort((x, y) => {<br /> if (x.Age > y.Age) return 1;<br /> if (x.Age < y.Age) return -1;<br /> return x.Name.CompareTo(y.Name);<br />});<br />people.ForEach(p => Console.WriteLine(p));<br />
  51. 51. Funksjoner av høyere orden.<br />
  52. 52. IEnumerable<Person> people = …;<br />int limit = 18;<br />if (people.All<Person>(p => p.Age >= limit)) <br />{<br />MessageBox.Show(”Bring outthebeer!”);<br />}<br />
  53. 53. LINQ.<br />
  54. 54. from p in people<br />where p.Age > 18<br />select p.Name;<br />
  55. 55. people<br /> .Where<Person>(p => p.Age > 18)<br /> .Select<Person, string>(p => p.Name);<br />
  56. 56. Hva nå?<br />
  57. 57. Til kamp mot løkkene!<br />
  58. 58. Og hvis jeg er ordentlig sprø?<br />
  59. 59. Les om Y-kombinatoren.<br />

×