SlideShare uma empresa Scribd logo
1 de 19
T W I T T E R : @ R A C H E L R E E S E
B L O G : R A C H E L R E E . S E
G I T H U B : R A C H E L R E E S E
iOS App Development with
Xamarin and F#
Why F#?
“
”
Y A N C U I
L E A D S E R V E R E N G I N E E R , G A M E S Y S ( S O U R C E )
F#…offers us an order of magnitude
increase in productivity and allows one
developer to perform the work…of a
team of dedicated developers on an
existing Java-based solution...
F# Testimonials
“
”
D A R R E N P L A T T
A M Y R I S B I O T E C H N O L O G Y ( S O U R C E )
The UI work is especially gratifying,
because state of the art for a lot of
genomic data display is still PNG images
embedded in JavaScript and with F# I can
render half a million data points on a web
page without jumping through hoops.
F# Testimonials
StartNewGame <| GetNewGameBoard()
F# Fundamentals
|>
Significant whitespace
Immutable by default
//names is tuple of (name, id)
Array.Parallel.partition (fun g -> ids.Contains(snd g)) names
|> fst
|> Array.toList
[1..10]
|> List.filter (fun x -> x % 2 = 0)
|> List.map (fun x -> x + 3)
|> List.sum
operaHouses //(Name, Current Productions) for each opera house
|> Array.map (fun (x,y) -> x, y |> Seq.toArray))
|> Array.filter (fun (x,y) -> y.Length > 0)
Quote of the Week blog post
Option Types
F# Fundamentals
F# C#
type Transport =
| Car of Make:string * Model:string
| Bus of Route:int
| Bicycle
public abstract class Transport{ }
public abstract class Car : Transport {
public string Make { get; private set; }
public string Model { get; private set; }
public Car (string make, string model) {
this.Make = make;
this.Model = model;
}
}
public abstract class Bus : Transport {
public int Route { get; private set; }
public Bus (int route) {
this.Route = route;
}
}
public class Bicycle: Transport { }
...
F# Fundamentals: Concise Code with DUs
F# Fundamentals: Pattern Matching
type Transport =
| Car of Make:string * Model:string
| Bus of Route:int
| Bicycle
let getThereVia (transport:Transport) =
match transport with
| Car (make,model) -> ()
| Bus route -> ()
Several reasons why you should learn F#
Discriminated unions
Immutable by default
Pattern matching
Option type
Custom operators
REPL
F# vs. Swift
‘Enums’Discriminated unions
Constant or VariableImmutable by default
Enhanced switchPattern matching
OptionalsOption type
Custom operatorsCustom operators
REPLREPL
No type providers
Lacks full type
inference
No units of
measure
Requires “return”
Still void, no unit
No parallelism &
async!
Single platform Young language
No easy cloning
syntax for
structures (e.g.
records)
Literal data
structures are only
list and dict
Simpler garbage
collection process
Active Patterns
But Swift is still missing out
TYPE PROVIDERS!
UNITS OF MEASURE!
Why F#?
Some existing
type providers.
See here for a full list.
Minesweeper Azure
Choose your
own
adventure
Matla
b RSS
XAML Rock, Paper,
Scissors Oracle MVVMCross SignalR
FunScript
R File System Python Regex
CSV World Bank SQLite Don Syme XML
Squirrels LINQ
IKV
M
MS
Dynamics
CRM
Freebase
JSON SQL Server
SQL Server
with EF
powershell Dates
Hadoo
p
OData WSDL Apiary Facebook
Get data
from
Hadoop
SQL Server
SQLite
RSS
Freebase
Oracle
CSV
OData
World Bank
JSON
Process
with
Matlab
Powershell
Regex
R
SignalR
Python
LINQ
Visualize
with
F#
Matlab
R
Get creative.
Why Xamarin?
Fully
Native
Cross
Platform
iOS Fundamentals: AppDelegate
iOS Fundamentals: ViewController
Minesweeper
T W I T T E R : @ R A C H E L R E E S E
B L O G : R A C H E L R E E . S E
G I T H U B : R A C H E L R E E S E
iOS App Development with
Xamarin and F#

Mais conteúdo relacionado

Mais procurados

Padrino::Validation::HTML5
Padrino::Validation::HTML5Padrino::Validation::HTML5
Padrino::Validation::HTML5
Hanae Aoki
 

Mais procurados (20)

Creating a modern web application using Symfony API Platform Atlanta
Creating a modern web application using  Symfony API Platform AtlantaCreating a modern web application using  Symfony API Platform Atlanta
Creating a modern web application using Symfony API Platform Atlanta
 
Squeezing Machine Learning into Serverless for Image Recognition - AWS Meetup...
Squeezing Machine Learning into Serverless for Image Recognition - AWS Meetup...Squeezing Machine Learning into Serverless for Image Recognition - AWS Meetup...
Squeezing Machine Learning into Serverless for Image Recognition - AWS Meetup...
 
!!Con - The Creative Programmer
!!Con - The Creative Programmer!!Con - The Creative Programmer
!!Con - The Creative Programmer
 
inline function
inline function inline function
inline function
 
Try Jetpack Compose
Try Jetpack ComposeTry Jetpack Compose
Try Jetpack Compose
 
Apache Flink - a Gentle Start
Apache Flink - a Gentle StartApache Flink - a Gentle Start
Apache Flink - a Gentle Start
 
Embulk at Treasure Data
Embulk at Treasure DataEmbulk at Treasure Data
Embulk at Treasure Data
 
Runtime performance
Runtime performanceRuntime performance
Runtime performance
 
What's new in Rails 5 - API Mode & Action Cable overview
What's new in Rails 5 - API Mode & Action Cable overviewWhat's new in Rails 5 - API Mode & Action Cable overview
What's new in Rails 5 - API Mode & Action Cable overview
 
Ninad cucumber rails
Ninad cucumber railsNinad cucumber rails
Ninad cucumber rails
 
Mercury: A Functional Review
Mercury: A Functional ReviewMercury: A Functional Review
Mercury: A Functional Review
 
Avoiding Callback Hell From JavaScript
Avoiding Callback Hell From JavaScriptAvoiding Callback Hell From JavaScript
Avoiding Callback Hell From JavaScript
 
Sheffield_R_ July meeting - Interacting with R - IDEs, Git and workflow
Sheffield_R_ July meeting - Interacting with R - IDEs, Git and workflowSheffield_R_ July meeting - Interacting with R - IDEs, Git and workflow
Sheffield_R_ July meeting - Interacting with R - IDEs, Git and workflow
 
10 minute command line apps with zio cli
10 minute command line apps with zio cli10 minute command line apps with zio cli
10 minute command line apps with zio cli
 
Ansible on AWS
Ansible on AWSAnsible on AWS
Ansible on AWS
 
Idiomatic Kotlin for Android
Idiomatic Kotlin for AndroidIdiomatic Kotlin for Android
Idiomatic Kotlin for Android
 
Wrapping java in awesomeness aka condensator
Wrapping java in awesomeness aka condensatorWrapping java in awesomeness aka condensator
Wrapping java in awesomeness aka condensator
 
Padrino::Validation::HTML5
Padrino::Validation::HTML5Padrino::Validation::HTML5
Padrino::Validation::HTML5
 
A live-coding introduction to Mill : finally a build tool we can all understand
A live-coding introduction to Mill : finally a build tool we can all understandA live-coding introduction to Mill : finally a build tool we can all understand
A live-coding introduction to Mill : finally a build tool we can all understand
 
Presentation kyushu-2018
Presentation kyushu-2018Presentation kyushu-2018
Presentation kyushu-2018
 

Semelhante a iOS App Development with F# and Xamarin

Visual Studio .NET2010
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010
Satish Verma
 
Exploring SharePoint with F#
Exploring SharePoint with F#Exploring SharePoint with F#
Exploring SharePoint with F#
Talbott Crowell
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
Eelco Visser
 
Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
Andres Almiray
 

Semelhante a iOS App Development with F# and Xamarin (20)

F# for functional enthusiasts
F# for functional enthusiastsF# for functional enthusiasts
F# for functional enthusiasts
 
F# and the DLR
F# and the DLRF# and the DLR
F# and the DLR
 
Visual Studio .NET2010
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010
 
Exploring SharePoint with F#
Exploring SharePoint with F#Exploring SharePoint with F#
Exploring SharePoint with F#
 
F# and functional programming
F# and functional programmingF# and functional programming
F# and functional programming
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
 
Practical F#
Practical F#Practical F#
Practical F#
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
Machine Learning as a Service: making sentiment predictions in realtime with ...
Machine Learning as a Service: making sentiment predictions in realtime with ...Machine Learning as a Service: making sentiment predictions in realtime with ...
Machine Learning as a Service: making sentiment predictions in realtime with ...
 
Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
 
F# 101
F# 101F# 101
F# 101
 
Async and Parallel F#
Async and Parallel F#Async and Parallel F#
Async and Parallel F#
 
Async and Parallel F#
Async and Parallel F#Async and Parallel F#
Async and Parallel F#
 
Haxe by sergei egorov
Haxe by sergei egorovHaxe by sergei egorov
Haxe by sergei egorov
 
Back to the Future with ES.next
Back to the Future with ES.nextBack to the Future with ES.next
Back to the Future with ES.next
 
Patterns and practices for real-world event-driven microservices by Rachel Re...
Patterns and practices for real-world event-driven microservices by Rachel Re...Patterns and practices for real-world event-driven microservices by Rachel Re...
Patterns and practices for real-world event-driven microservices by Rachel Re...
 
Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#
 
Three Functional Programming Technologies for Big Data
Three Functional Programming Technologies for Big DataThree Functional Programming Technologies for Big Data
Three Functional Programming Technologies for Big Data
 
Four Languages From Forty Years Ago
Four Languages From Forty Years AgoFour Languages From Forty Years Ago
Four Languages From Forty Years Ago
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

iOS App Development with F# and Xamarin

  • 1. T W I T T E R : @ R A C H E L R E E S E B L O G : R A C H E L R E E . S E G I T H U B : R A C H E L R E E S E iOS App Development with Xamarin and F#
  • 3. “ ” Y A N C U I L E A D S E R V E R E N G I N E E R , G A M E S Y S ( S O U R C E ) F#…offers us an order of magnitude increase in productivity and allows one developer to perform the work…of a team of dedicated developers on an existing Java-based solution... F# Testimonials
  • 4. “ ” D A R R E N P L A T T A M Y R I S B I O T E C H N O L O G Y ( S O U R C E ) The UI work is especially gratifying, because state of the art for a lot of genomic data display is still PNG images embedded in JavaScript and with F# I can render half a million data points on a web page without jumping through hoops. F# Testimonials
  • 5. StartNewGame <| GetNewGameBoard() F# Fundamentals |> Significant whitespace Immutable by default //names is tuple of (name, id) Array.Parallel.partition (fun g -> ids.Contains(snd g)) names |> fst |> Array.toList [1..10] |> List.filter (fun x -> x % 2 = 0) |> List.map (fun x -> x + 3) |> List.sum operaHouses //(Name, Current Productions) for each opera house |> Array.map (fun (x,y) -> x, y |> Seq.toArray)) |> Array.filter (fun (x,y) -> y.Length > 0)
  • 6. Quote of the Week blog post Option Types F# Fundamentals
  • 7. F# C# type Transport = | Car of Make:string * Model:string | Bus of Route:int | Bicycle public abstract class Transport{ } public abstract class Car : Transport { public string Make { get; private set; } public string Model { get; private set; } public Car (string make, string model) { this.Make = make; this.Model = model; } } public abstract class Bus : Transport { public int Route { get; private set; } public Bus (int route) { this.Route = route; } } public class Bicycle: Transport { } ... F# Fundamentals: Concise Code with DUs
  • 8. F# Fundamentals: Pattern Matching type Transport = | Car of Make:string * Model:string | Bus of Route:int | Bicycle let getThereVia (transport:Transport) = match transport with | Car (make,model) -> () | Bus route -> ()
  • 9. Several reasons why you should learn F# Discriminated unions Immutable by default Pattern matching Option type Custom operators REPL
  • 10. F# vs. Swift ‘Enums’Discriminated unions Constant or VariableImmutable by default Enhanced switchPattern matching OptionalsOption type Custom operatorsCustom operators REPLREPL
  • 11. No type providers Lacks full type inference No units of measure Requires “return” Still void, no unit No parallelism & async! Single platform Young language No easy cloning syntax for structures (e.g. records) Literal data structures are only list and dict Simpler garbage collection process Active Patterns But Swift is still missing out
  • 12. TYPE PROVIDERS! UNITS OF MEASURE! Why F#?
  • 13. Some existing type providers. See here for a full list. Minesweeper Azure Choose your own adventure Matla b RSS XAML Rock, Paper, Scissors Oracle MVVMCross SignalR FunScript R File System Python Regex CSV World Bank SQLite Don Syme XML Squirrels LINQ IKV M MS Dynamics CRM Freebase JSON SQL Server SQL Server with EF powershell Dates Hadoo p OData WSDL Apiary Facebook
  • 14. Get data from Hadoop SQL Server SQLite RSS Freebase Oracle CSV OData World Bank JSON Process with Matlab Powershell Regex R SignalR Python LINQ Visualize with F# Matlab R Get creative.
  • 19. T W I T T E R : @ R A C H E L R E E S E B L O G : R A C H E L R E E . S E G I T H U B : R A C H E L R E E S E iOS App Development with Xamarin and F#

Notas do Editor

  1. Play Minesweeper game. I work at FFL using iOS and F#. Just helped start the Nash F# UG & am involved in the Nashville Xamarin UG. One of the LambdaLadies founders. Slides up after the talk. You should all move to Nashville!!! :D
  2. Maybe you’re a C# dev or maybe you’re an iOS dev right now. Why should you switch?
  3. Clarity & conciseness of code.
  4. F# gets flack for lack of UI support. Not using editors: true for every gui technology. Winforms & ASP.NET, amirite?
  5. Start with |> Like unix shell scripting pipe Flow works better backwards sometimes. Note whitespace.
  6. NullReferenceException can be obviated because of option types. Similar to nullable<int> but different because: Can be used on any type (strings, functions) When pattern matched on, forces you to consider None case Can use map, iter, etc. functions. Nestable: Option<Option<int>> is valid.
  7. Sort of like enums. Can model smaller obj hierarchies with them, like here.
  8. Can pattern match on values, tuples, records, DUs.
  9. Type providers are a way to return typed data from an external data source. UoM because game physics Phil tags some integers as <pixel> to represent actual screen space – plus self-documenting. <Tasky Data demo> <UoM demo> <Freebase demo>
  10. Why not swift. Why not PhoneGap.
  11. If currently an ios dev, this should look familiar because of all the UI-prefaced things. AppDelegate must be registered Main needs to be labeled as an Entry Point. <- is assignment FinishedLaunching: Set root view controller.
  12. Inherit from UIViewController() Override ViewDidLoad, ViewWillAppear, ViewDidAppear…
  13. Work at FFL using iOS and F#. Just helped start the Nash F# user group. Previously ran VT Fun. This was a difficult talk to put together. Half the room knows F#, but not iOS or Xamarin, and the other half’s the opposite. Start w/ covering why you should consider F# Then some language basics And Xamarin basics.