SlideShare una empresa de Scribd logo
1 de 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;

Más contenido relacionado

Más de Tuomas Hietanen

Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Blockchain (using NBitcoin and FSharp)
Blockchain (using NBitcoin and FSharp)Tuomas Hietanen
 
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)Tuomas Hietanen
 
Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Possible FSharp Refactorings could be...
Possible FSharp Refactorings could be...Tuomas Hietanen
 
Using f# project from c#
Using f# project from c#Using f# project from c#
Using f# project from c#Tuomas Hietanen
 
Coding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesCoding with LINQ, Patterns & Practices
Coding with LINQ, Patterns & PracticesTuomas Hietanen
 

Más de 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ä

Notas del editor

  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);