SlideShare une entreprise Scribd logo
1  sur  23
ISKA 2010

timm@infosupport.com




                          Functioneel
                       programmeren in
                              C#
Inhoud
•   Wat ?
•   Waarom ?
•   Demo
•   Toekomst
Wat ?
functional programming is a programming
  paradigm that treats computation as
  the evaluation of mathematical
  functions andavoids state and mutable data.
  It emphasizes the application of
  functions.......... developed in the 1930s to
  investigate function definition, function
  application, and recursion.........in C# version
  3.0 and higher, lambda functions can be
  employed to write programs in a functional
  style
                       Endeavour 5 Launch      3
Waarom ?




 Waarom niet ?

           Endeavour 5 Launch   4
Waarom ?




  Iedereen kent (al dan niet onbewust) al
        minstens één functionele taal




                   Endeavour 5 Launch       5
Waarom ?



      SELECT Naam, Leeftijd
          FROM Persoon
   WHERE Achternaam LIKE ‘%Mahy%’




               Endeavour 5 Launch   6
Waarom ?
DECLARE @achternaam nvarchar(255)
DECLARE @id bigint
DECLARE @resultaat table ( naam nvarchar(255), leeftijd short)

DECLARE c1 CURSOR READ_ONLY
FOR
SELECT Id
FROM Persoon

OPEN c1
FETCH NEXT FROM c1
INTO @Id

WHILE @@FETCH_STATUS = 0
BEGIN
      SELECT TOP 1 @Achternaam = Achternaam FROM Persoon WHERE Id = @Id
      IF CONTAINS( @achternaam ,'Mahy')
      BEGIN
                SELECT Naam, Leeftijd FROM Persoon
                WHERE Id = @Id
                INTO @resultaat
      END IF
      FETCH NEXT FROM c1
      INTO @Id
END
CLOSE c1
DEALLOCATE c1




                                                                 Endeavour 5 Launch   7
Waarom ?




 De tweede oplossing heeft als voordeel .......




                      Endeavour 5 Launch     8
Waarom ?




      Job security ?


            Endeavour 5 Launch   9
Waarom ?



    Security through
       obscurity ?


           Endeavour 5 Launch   10
Waarom ?



   Logisch toch om 1°
   oplossing te kiezen ?


            Endeavour 5 Launch   11
Waarom ?




           Endeavour 5 Launch   12
Waarom ?




           Endeavour 5 Launch   13
Waarom ?




           Endeavour 5 Launch   14
Basis principes van FP
•   Closures (delegates)
•   Strict vs Non-strict evaluation (yielding)
•   Duck typing (via anonymous types)
•   Type inference (var)
•   Lambda’s ( x,y => x + y )
•   Immutable




                          Endeavour 5 Launch     15
Demo




Bouw een applicatie die een reeks bestanden
  inleest en telkens het aantal woorden telt




                    Endeavour 5 Launch   16
Gebruikt in de demo
•   Higher-order functions
•   Currying
•   Non-strict evaluation
•   Immutable states




                       Endeavour 5 Launch   17
Voordelen
• Parallel (geen locking, sync problemen)
  – immutable
• Echt hergebruik van code
  – ducktyping stijl van functies
• Echt testbaar
  – geen moeilijke mockings / scenario tests




                         Endeavour 5 Launch    18
Nadelen
• Debugging
• Yielding kan performance boosten maar in
  veel gevallen ook ********




                     Endeavour 5 Launch   19
Toekomst
• .NET 4.0 / VS 2010
  – Parallel extensions
  – F#
  – C# DLR
  – Dynamic lookup (duck typing going crazy)
  – Co - contra variance
• .NET 5.0
  – F# --> C# (async block, .....)
• Oslo platform / M

                           Endeavour 5 Launch   20
Toekomst
• Dryad LINQ (
  http://research.microsoft.com/en-us/projects/Dry
  )




                     Endeavour 5 Launch   21
Maar vergeet niet



 Alles wat in F# kan, kan je ook doen in C#. Je
        moet enkel de F# keywords even
        implementeren als functions....




                      Endeavour 5 Launch    22
Toekomst
• Mogelijke ISKA’s indien interesse:
  – Advanced FP in C# met als topics:
     •   Continuations
     •   Folding
     •   Impure
     •   Memoization
     •   Monads
     •   PatternMatching
     •   Recursion
     •   Unfolding
  – F# introductie

                           Endeavour 5 Launch   23

Contenu connexe

En vedette

Tarea1 daniel sánchez
Tarea1 daniel sánchezTarea1 daniel sánchez
Tarea1 daniel sáncheznielo19
 
Традигиталните хора
Традигиталните хораТрадигиталните хора
Традигиталните хораVioleta Georgieva
 
Marcel duchamp y otras obras Dadaístas
Marcel duchamp y otras obras DadaístasMarcel duchamp y otras obras Dadaístas
Marcel duchamp y otras obras Dadaístaskevpaf
 
La diferencias de las sustancias
La diferencias de las sustancias La diferencias de las sustancias
La diferencias de las sustancias VRglez
 
Tipos de empleo
Tipos de empleoTipos de empleo
Tipos de empleofercho1708
 
Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...
Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...
Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...Naruhiko Ogasawara
 
Trabajo tecnologia 9B
Trabajo tecnologia 9BTrabajo tecnologia 9B
Trabajo tecnologia 9Bangie_2206
 
Bitacora discusiones de equipo
Bitacora discusiones de equipoBitacora discusiones de equipo
Bitacora discusiones de equipoyennycortes25
 
Pengertian kewirausahaan
Pengertian kewirausahaanPengertian kewirausahaan
Pengertian kewirausahaanDendhy Nugraha
 
Planificación estratégica
Planificación estratégicaPlanificación estratégica
Planificación estratégicaBrian Gomez
 
Mandala de talento humano
Mandala de talento humanoMandala de talento humano
Mandala de talento humanoMERLYN190287
 
Blue Jay Football
Blue  Jay  FootballBlue  Jay  Football
Blue Jay Footballbondu
 

En vedette (20)

Tarea1 daniel sánchez
Tarea1 daniel sánchezTarea1 daniel sánchez
Tarea1 daniel sánchez
 
Традигиталните хора
Традигиталните хораТрадигиталните хора
Традигиталните хора
 
Marcel duchamp y otras obras Dadaístas
Marcel duchamp y otras obras DadaístasMarcel duchamp y otras obras Dadaístas
Marcel duchamp y otras obras Dadaístas
 
La diferencias de las sustancias
La diferencias de las sustancias La diferencias de las sustancias
La diferencias de las sustancias
 
Tipos de empleo
Tipos de empleoTipos de empleo
Tipos de empleo
 
Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...
Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...
Kanto LibreOffice Study Party Opening Talk (IIJ ver.) / 関東LibreOffice勉強会諸注意など...
 
Cuando odiamos
Cuando odiamosCuando odiamos
Cuando odiamos
 
Italie caruso
Italie carusoItalie caruso
Italie caruso
 
Papelucho soy dixleso
Papelucho soy dixlesoPapelucho soy dixleso
Papelucho soy dixleso
 
Trabajo tecnologia 9B
Trabajo tecnologia 9BTrabajo tecnologia 9B
Trabajo tecnologia 9B
 
Proyecto contaiii
Proyecto contaiiiProyecto contaiii
Proyecto contaiii
 
Bitacora discusiones de equipo
Bitacora discusiones de equipoBitacora discusiones de equipo
Bitacora discusiones de equipo
 
Pengertian kewirausahaan
Pengertian kewirausahaanPengertian kewirausahaan
Pengertian kewirausahaan
 
Planificación estratégica
Planificación estratégicaPlanificación estratégica
Planificación estratégica
 
Mandala de talento humano
Mandala de talento humanoMandala de talento humano
Mandala de talento humano
 
Blue Jay Football
Blue  Jay  FootballBlue  Jay  Football
Blue Jay Football
 
20130424123009143
2013042412300914320130424123009143
20130424123009143
 
Rss
RssRss
Rss
 
Toleranta(1)
Toleranta(1)Toleranta(1)
Toleranta(1)
 
CRM Software Development
CRM Software DevelopmentCRM Software Development
CRM Software Development
 

Similaire à 2010 iska - tim m - functioneel programmeren in c-sharp

Niet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappenNiet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappenRick Beerendonk
 
PfCongrez 2007 Zend Studio Overview
PfCongrez 2007 Zend Studio OverviewPfCongrez 2007 Zend Studio Overview
PfCongrez 2007 Zend Studio OverviewIvo Jansch
 
Verander legacy code in clean code!
Verander legacy code in clean code!Verander legacy code in clean code!
Verander legacy code in clean code!David Baak
 
Webinar programmeren c# java php python c++ r nodejs
Webinar programmeren c# java php python c++ r  nodejsWebinar programmeren c# java php python c++ r  nodejs
Webinar programmeren c# java php python c++ r nodejsEduvision Opleidingen
 
Devnology Community Day
Devnology Community DayDevnology Community Day
Devnology Community Dayboonzaai
 
DUUG Meetup Umbraco Headless Jeroen Breuer & SemSnel
DUUG Meetup Umbraco Headless Jeroen Breuer & SemSnelDUUG Meetup Umbraco Headless Jeroen Breuer & SemSnel
DUUG Meetup Umbraco Headless Jeroen Breuer & SemSnelJeroenBreuer3
 
DSD-NL 2021 Ontwikkelingen iMOD python - Bootsma
DSD-NL 2021 Ontwikkelingen iMOD python - BootsmaDSD-NL 2021 Ontwikkelingen iMOD python - Bootsma
DSD-NL 2021 Ontwikkelingen iMOD python - BootsmaDeltares
 
PFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele testsPFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele testsRichard Tuin
 
Inleiding tot Programmeren - Practicum 1
Inleiding tot Programmeren - Practicum 1Inleiding tot Programmeren - Practicum 1
Inleiding tot Programmeren - Practicum 1rvdbossc
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Developmentroelofr
 
Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tim Ameye
 
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...Adlib_gebruikersgroep
 
Slides AI en Chatgpt met voorbeelden.pdf
Slides AI en Chatgpt met voorbeelden.pdfSlides AI en Chatgpt met voorbeelden.pdf
Slides AI en Chatgpt met voorbeelden.pdfEnnuonline
 
Moderne Software Engineering
Moderne Software EngineeringModerne Software Engineering
Moderne Software Engineeringguestf2fc08
 
RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...
RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...
RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...Jeroen Derwort
 
WPMeetup Rotterdam 15 december: Advanced Custom Fields
WPMeetup Rotterdam 15 december: Advanced Custom FieldsWPMeetup Rotterdam 15 december: Advanced Custom Fields
WPMeetup Rotterdam 15 december: Advanced Custom Fieldssebastiaandegeus
 

Similaire à 2010 iska - tim m - functioneel programmeren in c-sharp (20)

Niet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappenNiet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappen
 
Les4
Les4Les4
Les4
 
PfCongrez 2007 Zend Studio Overview
PfCongrez 2007 Zend Studio OverviewPfCongrez 2007 Zend Studio Overview
PfCongrez 2007 Zend Studio Overview
 
Verander legacy code in clean code!
Verander legacy code in clean code!Verander legacy code in clean code!
Verander legacy code in clean code!
 
Webinar programmeren c# java php python c++ r nodejs
Webinar programmeren c# java php python c++ r  nodejsWebinar programmeren c# java php python c++ r  nodejs
Webinar programmeren c# java php python c++ r nodejs
 
Devnology Community Day
Devnology Community DayDevnology Community Day
Devnology Community Day
 
DUUG Meetup Umbraco Headless Jeroen Breuer & SemSnel
DUUG Meetup Umbraco Headless Jeroen Breuer & SemSnelDUUG Meetup Umbraco Headless Jeroen Breuer & SemSnel
DUUG Meetup Umbraco Headless Jeroen Breuer & SemSnel
 
DSD-NL 2021 Ontwikkelingen iMOD python - Bootsma
DSD-NL 2021 Ontwikkelingen iMOD python - BootsmaDSD-NL 2021 Ontwikkelingen iMOD python - Bootsma
DSD-NL 2021 Ontwikkelingen iMOD python - Bootsma
 
PFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele testsPFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele tests
 
Inleiding tot Programmeren - Practicum 1
Inleiding tot Programmeren - Practicum 1Inleiding tot Programmeren - Practicum 1
Inleiding tot Programmeren - Practicum 1
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012
 
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
 
Slides AI en Chatgpt met voorbeelden.pdf
Slides AI en Chatgpt met voorbeelden.pdfSlides AI en Chatgpt met voorbeelden.pdf
Slides AI en Chatgpt met voorbeelden.pdf
 
Moderne Software Engineering
Moderne Software EngineeringModerne Software Engineering
Moderne Software Engineering
 
Basis Javascript
Basis JavascriptBasis Javascript
Basis Javascript
 
RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...
RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...
RB Tech Night 2017. Performance: "Wat je niet moet doen als je 4 miljoen gebr...
 
WPMeetup Rotterdam 15 december: Advanced Custom Fields
WPMeetup Rotterdam 15 december: Advanced Custom FieldsWPMeetup Rotterdam 15 december: Advanced Custom Fields
WPMeetup Rotterdam 15 december: Advanced Custom Fields
 
Eindpresentatie
EindpresentatieEindpresentatie
Eindpresentatie
 
Uberscrum
UberscrumUberscrum
Uberscrum
 

2010 iska - tim m - functioneel programmeren in c-sharp

  • 1. ISKA 2010 timm@infosupport.com Functioneel programmeren in C#
  • 2. Inhoud • Wat ? • Waarom ? • Demo • Toekomst
  • 3. Wat ? functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions andavoids state and mutable data. It emphasizes the application of functions.......... developed in the 1930s to investigate function definition, function application, and recursion.........in C# version 3.0 and higher, lambda functions can be employed to write programs in a functional style Endeavour 5 Launch 3
  • 4. Waarom ? Waarom niet ? Endeavour 5 Launch 4
  • 5. Waarom ? Iedereen kent (al dan niet onbewust) al minstens één functionele taal Endeavour 5 Launch 5
  • 6. Waarom ? SELECT Naam, Leeftijd FROM Persoon WHERE Achternaam LIKE ‘%Mahy%’ Endeavour 5 Launch 6
  • 7. Waarom ? DECLARE @achternaam nvarchar(255) DECLARE @id bigint DECLARE @resultaat table ( naam nvarchar(255), leeftijd short) DECLARE c1 CURSOR READ_ONLY FOR SELECT Id FROM Persoon OPEN c1 FETCH NEXT FROM c1 INTO @Id WHILE @@FETCH_STATUS = 0 BEGIN SELECT TOP 1 @Achternaam = Achternaam FROM Persoon WHERE Id = @Id IF CONTAINS( @achternaam ,'Mahy') BEGIN SELECT Naam, Leeftijd FROM Persoon WHERE Id = @Id INTO @resultaat END IF FETCH NEXT FROM c1 INTO @Id END CLOSE c1 DEALLOCATE c1 Endeavour 5 Launch 7
  • 8. Waarom ? De tweede oplossing heeft als voordeel ....... Endeavour 5 Launch 8
  • 9. Waarom ? Job security ? Endeavour 5 Launch 9
  • 10. Waarom ? Security through obscurity ? Endeavour 5 Launch 10
  • 11. Waarom ? Logisch toch om 1° oplossing te kiezen ? Endeavour 5 Launch 11
  • 12. Waarom ? Endeavour 5 Launch 12
  • 13. Waarom ? Endeavour 5 Launch 13
  • 14. Waarom ? Endeavour 5 Launch 14
  • 15. Basis principes van FP • Closures (delegates) • Strict vs Non-strict evaluation (yielding) • Duck typing (via anonymous types) • Type inference (var) • Lambda’s ( x,y => x + y ) • Immutable Endeavour 5 Launch 15
  • 16. Demo Bouw een applicatie die een reeks bestanden inleest en telkens het aantal woorden telt Endeavour 5 Launch 16
  • 17. Gebruikt in de demo • Higher-order functions • Currying • Non-strict evaluation • Immutable states Endeavour 5 Launch 17
  • 18. Voordelen • Parallel (geen locking, sync problemen) – immutable • Echt hergebruik van code – ducktyping stijl van functies • Echt testbaar – geen moeilijke mockings / scenario tests Endeavour 5 Launch 18
  • 19. Nadelen • Debugging • Yielding kan performance boosten maar in veel gevallen ook ******** Endeavour 5 Launch 19
  • 20. Toekomst • .NET 4.0 / VS 2010 – Parallel extensions – F# – C# DLR – Dynamic lookup (duck typing going crazy) – Co - contra variance • .NET 5.0 – F# --> C# (async block, .....) • Oslo platform / M Endeavour 5 Launch 20
  • 21. Toekomst • Dryad LINQ ( http://research.microsoft.com/en-us/projects/Dry ) Endeavour 5 Launch 21
  • 22. Maar vergeet niet Alles wat in F# kan, kan je ook doen in C#. Je moet enkel de F# keywords even implementeren als functions.... Endeavour 5 Launch 22
  • 23. Toekomst • Mogelijke ISKA’s indien interesse: – Advanced FP in C# met als topics: • Continuations • Folding • Impure • Memoization • Monads • PatternMatching • Recursion • Unfolding – F# introductie Endeavour 5 Launch 23