LINQ käytännössä
Upcoming SlideShare
Loading in...5
×
 

LINQ käytännössä

on

  • 689 views

LINQ käytännössä.

LINQ käytännössä.

Sanko F# -tapahtuman diasarja

Statistics

Views

Total Views
689
Views on SlideShare
687
Embed Views
2

Actions

Likes
0
Downloads
0
Comments
1

1 Embed 2

http://www.linkedin.com 2

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NoDerivs LicenseCC Attribution-NoDerivs License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Func on “funktio tietotyyppinä”Nämä koodilohkot ovat sama asia.Ensimmäiset tyyppiparametrit ovat parametreja. Viimeisenä tyyppiparametrina on paluuarvoTyyppimäärittelyissä jo tiedetään tyyppi…
  • List sijaan käytä kantaluokkaa IEnumerable- “Lueteltava”- Se on kantaluokka listoille (ja LINQ:lle) Siinä ei ole .RemoveAt(…) metodia, joten muut eivät pääse puuttumaan väliin
  • UsingSystem.LinqSuodatetaan turhat
  • Debugatessa huomaa, miten suoritus tapahtuu! Älä teeif(list.Count() == 0) vaan if(!list.Any()) niin ei evaluoida koko listaa läpi
  • 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=>i%2==0);

LINQ käytännössä LINQ käytännössä Presentation Transcript

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