Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
F# is a new language that ships with Visual Studio 2010. It is based on the functional OCaml language. F# is largely a functional language, though it has traces of object orientation and imperative languages too. Writing safe concurrent programs has become a concern recently, as multi-core CPUs have become widespread. Functional language helps support concurrency by encouraging the use of immutable data structures that can be passed between threads and machines without worrying about thread safety or concurrency.
I'm going to show you a brief demo of the FSharpEditor here inside Visual Studio. I have already opened a project that called FSharpEditor. I'm going to double-click on this Program.fs file. You might guess that FS stands for FSharp. That means that this file contains F# code. So I'll double-click, and this is the editor. I'm going to use the printfn function to print information out to the console. I'm also going to use this #light compiler flag, which makes it a little bit easier to write the F# code.
This means I don't have to end the line of code with the colon, colon syntax, which is the normal way of doing that. On the other hand, it means that indentation takes more significance. The way you indent your code is more important when used the #light switch. So I'm going to use the open keyword to resolve namespaces, so that I can do things like a System.Console.WriteLine. This means I could leave off this system prefix if necessary. It's kind of like the import or using statements in Visual Basic and C#.
I'm going to print out of the console the word Hello, or I can use the System.Console.WriteLine mechanism for doing that. That's familiar. Again, if you're comfortable with .NET classes, this code should look familiar to you. Next, I am going to declare a variable. So the let keyword allows me to that in F#. There are some differences. Variables are immutable in F#, which means that once you declare the variable and you load the initial data into it, you can't change it anymore. But that also makes it the thread-safe.
So on line 21 what I am doing is I'm declaring a variable called age. I'm doing a mathematical addition there: 34 + 2. Notice that I don't have to put anything special on the end of the line here because of that #light compiler flag I have up there. Then once this variable is declared, I can use it. Now if I try to do something like age = 80, I'll get a blue squiggle. I'm getting that kind of useless message here that says the expression should have a type of 'unit', but it has a type of 'bool.' Basically, it's saying you can't assign another value to this.
If I try to use the let keyword, I'll get a different squiggle. This time it's telling me I have already declared a variable called age, and you need to come up with a new name. So let me comment this out, and we'll continue. So next, I write out, "Enter your full name." And then I'm going to use the Console.ReadLine to read the contents and store them in this variable. Then I'm going to print them out. Then I'm going to use this %s as a token, and this %d as a token to say, take the full name here and place it within the string where this token is.
Then also do the same thing with age and place it here. All right, does that make sense? Let me show you one another feature that a lot of people really like about F# is that functions are first-class citizens. You can declare them in line and then pass them around as arguments to elsewhere in your code. For instance, you can create a function and then pass that in as an argument to another function. So what I'm doing on line 37 is I am declaring a function called calculateSalesTax.
And then I'm saying that this function expects to have two incoming parameters: sale and tax. Then on the right side of the Equal sign, I'm writing the code that's part of that function. I'm saying, multiply sales by tax. Now, I can come down here and run that function that I just declared, by using its name and then passing these two arguments in. Notice that I'm not separating those with commas; I'm just passing them in. That's a common metaphor in F#--not using commas here. There is an alternative syntax down here on line 42, where I say let calculateTotalSale, and then I can use what's called a tuple in order to set off items.
By using the parentheses here, I'm saying I have an argument that called sale, an argument called commission, and then again, just like before, I write the code for the function on the other side of Equal sign. Then I call it the same as before, but now because I declared it like this, I can pass the arguments in with a comma separating them. Want to see this run? I do. I'm also going to put a break point right here by pressing F9. I'll go up to the Debug menu and choose Start Debugging. Go ahead and say Yes to save these changes.
You can see I have put a few items to the console. I'll enter my name. I do the string concatenation, and then I press Enter, and you can see I just hit my break point back here. I have a section on working with breakpoints and debugging, but right now, I'm just going to step through my code by clicking on this Step button. Notice what happened. I declared this function up on line 37. I'm running line 39, but you can see it just stepped back, and it's showing me I'm running this code up here: sale * tax, which should be a value of four, if I hover over that, and this one has a value of five.
Then I'm going to press just Step Into a couple more times. And then I'll hover over the total, and you'll see that that has a value of 20. So you see that these in-line functions work exactly the same as if they were regular functions. Learning a new language is a great way to appreciate your current programming language. I think F# is a great candidate to look at for your next language. What do you think about giving it a go?
Get unlimited access to all courses for just $25/month.Become a member