What can we learn from
Python and JavaScript
while programming in C# 4.0?
Introduction
Who I am?
First Name: Frederic
Last Name: Torres
Web Site: http://www.FredericTorres.net
State: Massachusett
- I have been writing code since MS-DOS 2.0 on different continents.
- I write code in C# by day and in Python or JavaScript by night.
What about you ?
- Python, everyone.
- IronPython 2.7 and tools for Visual Studio 2010 has been released.
- We all known JavaScript, right!
Douglas Crockford Web site about JavaScript

Why am I here?
Dynamic Languages - Python, Ruby, JavaScript.
- Source Code Length
- Readability
Python and Ruby
- The Pythonic way (Python Secret Weblog)
- Ruby is designed to make programmers happy
Peter Norvig from Google wrote a spell checker in 21 lines in Python How to Write a Spelling Corrector
import re, collections
def words(text): return re.findall('[a-z]+', text.lower())
def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model
NWORDS = train(words(file('big.txt').read()))
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def edits1(word):
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in splits if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
inserts = [a + c + b for a, b in splits for c in alphabet]
return set(deletes + transposes + replaces + inserts)
def known_edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)
def known(words): return set(w for w in words if w in NWORDS)
def correct(word):
candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
return max(candidates, key=NWORDS.get)
- Is there anything we can learn from programming Python and JavaScript and apply it in C#?
- This is the question I have been thinking about.
- And it is not just me!
A different way to code in C#
- Is there a different way to write code in C# in the air?
- 3 Samples
- ASP.NET MVC Syntax (Microsoft Product)
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
- Massive and Dapper : 2 small ORMs
- Written in less than 400 lines of code each
- Written by Rob Conery and Sam Saffron (from Stack Overflow)
- Have been talked about on the hanselminutes podcast.
// Massive Syntax
var table = new Products();
table.Update( new { ProductName = "Chicken Fingers" } , 12);
var resultSet1 = persons.All(columns: "*", where: "ID >= @0", args: 1);
foreach(var p in resultSet1)
Console.WriteLine(String.Format("ID:{0}, Name:{1}, {2}", p.ID, p.LastName, p.FirstName));
//
- The Dapper library and reflection.
- Web Matrix (Microsoft Product)
How did I got involve in this
- The more experienced with Dynamic Languages, the more you will miss their syntaxes working in C#.
- Is there anything that we can do with?
- Reflection
- Generics
- Anonymous types
- Extension method
- Lambda expression/statment
- The keyword params
- The keyword dynamic and the class DynamicObject
DynamicSugar.Net
- http://www.DynamicSugar.Net
- A library providing methods and classes inspired by the dynamic languages Python and JavaScript
- To write shorter and more readable source code in C# 4.0
- On GitHub.com
- On NuGet.org
It's all about Syntactic sugar.
Let's Start...
What can we learn about formatting string from JavaScript?
In C#
var firstName = "Fred";
Console.WriteLine(String.Format("Hello {0}",firstName));
In JavaScript
In JavaScript you may find this, which is not standard, but generally implemented via extension methods.
var firstName = "Fred";
print(String.format("Hello {0}",firstName));
print("Hello {0}".format(firstName));
print("Hello {firstName}".format( { firstName:"Fred" } ));
- Demo
What can we learn about formatting string from Python?
class Person(object):
def __init__(self, name, age):
self.Name = name
self.Age = age
def Format(self, myFormat):
return myFormat.format(**self.__dict__)
#######################################
p = Person("Fred", 45)
print p.Format("Name={Name}, Age={Age}")
- Demo
Object Literals [ ]
Python's List
i = 3
if i in [1,3,5]:
print "in the list"
JavaScript's Array
This code is not standard JavaScript. The method Contains() and In() are
defined before this code as extension methods.
var i = 3;
if([1,3,5].Contains(i))
console.log("in the list")
if(i.In([1,3,5]))
console.log("in the list")
- Demo
What about a function returning multiple values?
What Python's syntax can say about that?
def ComputeValues(value):
return True, 2.0*value, "Hello"
ok, amount, message = ComputeValues(2)
print ok:{0}, amount:{1}, message:{2}".format(ok, amount, message)
More about this
def ComputeValues(value):
return True, 2.0*value, "Hello"
ok, amount, message = ComputeValues(2)
print "ok:%s, amount:%s, message:%s" % (ok, amount, message)
values = ComputeValues(2)
print "ok:%s, amount:%s, message:%s" % (values[0], values[1], values[2])
What JavaScript's syntax can say about that?
function ComputeValues(value) {
return { ok:true, amount:2.0*value, message:"Hello" };
}
var r = ComputeValues(2);
print("ok:" + r.ok);
print("amount:" + r.amount);
print("message:" + r.message);
- Demo
Object Literals { }
- Passing a populated dictionary to a function very common in Dynamic Languages.
- In Python and Ruby, there is a dedicated syntax just to do that.
This allow to pass an unlimited number of argument in very clear way, by defining the name and the value of each argument.
- JavaScript - an Ajax call with jQuery.
$.ajax(
{
type : "POST",
url : "some.php",
data : "name=John&location=Boston",
success : function(msg){ alert( "Data Saved: " + msg ); }
}
);
- Python
def MyFunction(**context):
if context["debug"]:
print "Debug on"
if "America" in context["continent"]:
print context["continent"]
MyFunction( debug=True, continent="North America" )
MyFunction( debug=True, continent="South America" )
MyFunction( debug=False, continent="Europe" )
With C# 4.0
- Named parameters allow a similar syntax,
- The number of arguments is limited and have to be predefined.
void MyFunction(bool debug, string continent){
// code
}
MyFunction(false, "Europe");
MyFunction(debug:false, continent:"Europe");
- Demo
Conclusion
- There are a lot of good concepts in Dynamic Languages
- JavaScript is everywhere
- Learn it

- C# is becoming more and more dynamic
- More API are going to using these new language Constructs.
- ASP.NET MVC, Web Matrix.
- C# 5 will have a REPL (Read, Eval, Print, Loop)
- C# 5 will have Eval() method (this should not be good)
- More API are going to using these new language Constructs.
- 2 Urls:

I have no words for this great post such a awe-some information i got gathered. Thanks to Author.
ReplyDeleteVee Eee Technologies| Vee Eee Technologies|