SlideShare a Scribd company logo
1 of 8
LINQ käytännössä ”Teoriassa teoria ja käytäntö ovat sama asia, mutta käytännössä ne eivät ole”. Paitsi matematiikassa…
Func<TSisään1, TSisään2, TUlos> public int PlusViis(int i){     return i+5; } Func<int, int> PlusViis =  delegate(int i) { return i + 5; }; Func<int, int> PlusViis = i => i + 5;
IEnumerable<T>
”Ikiluuppi” publicstaticIEnumerable<int> LuonnollisetLuvut() { inti=0; while(true){ yieldreturn i++; } }
Suodatettu publicstaticIEnumerable<int> Parittomat() { returnLuonnollisetLuvut().Where(i=>i%2==1); }
Toimii! static void Main(string[] args) {     var luvut = Parittomat().Take(5);     //var suoritettu = luvut.ToList();     foreach(var i in luvut)          Console.WriteLine(i); }
Mitä on LINQ:nsisällä? public static class HakuExtension{     public static IEnumerable<T> Missä<T>( 	  this IEnumerable<T> lista, Func<T, bool> ehto){       foreach(var i in lista){           if (ehto(i)) yield return i;       }         } }
Imperatiivinen vs. deklaratiivinen var result = new List<int>(); foreach(var i in lista){     if(i % 2 == 0){         result.Add(i);     } } var result =     from i in lista     where i % 2 == 0     select i;

More Related Content

More from Tuomas Hietanen

More from Tuomas Hietanen (9)

Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)
 
Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)Machine learning (using Accord.NET and FSharp)
Machine learning (using Accord.NET and FSharp)
 
Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...
 
Function therory
Function theroryFunction therory
Function therory
 
The Pain Points of C#
The Pain Points of C#The Pain Points of C#
The Pain Points of C#
 
Linq in practice
Linq in practiceLinq in practice
Linq in practice
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#
 
Funktioteoriaa
FunktioteoriaaFunktioteoriaa
Funktioteoriaa
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & Practices
 

LINQ käytännössä

Editor's Notes

  1. Func&lt;…&gt; on “funktio tietotyyppinä”Nämä koodilohkot ovat sama asia.Ensimmäiset tyyppiparametrit ovat parametreja. Viimeisenä tyyppiparametrina on paluuarvoTyyppimäärittelyissä jo tiedetään tyyppi…
  2. List&lt;T&gt; sijaan käytä kantaluokkaa IEnumerable&lt;T&gt;- “Lueteltava”- Se on kantaluokka listoille (ja LINQ:lle) Siinä ei ole .RemoveAt(…) metodia, joten muut eivät pääse puuttumaan väliin
  3. UsingSystem.LinqSuodatetaan turhat
  4. Debugatessa huomaa, miten suoritus tapahtuu! Älä teeif(list.Count() == 0) vaan if(!list.Any()) niin ei evaluoida koko listaa läpi
  5. Deklaratiivisuus on parempi: Korkeamman tason abstraktio Määritellään mitä kone tekee, ei miten kone tekeeSQL-muotoinen syntaksi ei ole se pointti, vaan funktionaalisuus!SQL-muotoinen syntaksi on vain eri tapa ilmaista .Where(i=&gt;i%2==0);