Python vs C#
I have read the article https://www.red-gate.com/simple-talk/development/dotnet-development/10-reasons-python-better-than-c-sharp
I think that deserves an answer – so I take all points to answer to them. You can replicate the code in C# 10 / .NET 6 with a globalusings.cs with the following content:
1 2 3 4 5 | global using static System.Console; global using static System.Linq.Enumerable; global using static System.IO.Directory; global using static System.String; global using static System.Math; |
So let’s start:
Point 1 - Indented code blocks
01 02 03 04 05 06 07 08 09 10 11 12 13 | //Point 1 - Indented code blocks //With curly braces I can indent whatever way I want - I am not constrained using System.Collections.Generic; foreach ( var i in Range(1, 11)) { if (i % 3 == 0) WriteLine( "fizz" ); else if (i % 5 == 0) WriteLine( "buzz" ); } |
Also , when I want to comment something , with C# I know when the else if is
terminating without counting tabs. Just see where the { is closing with }
Point 2 - Self-declaring Variables
Seriously? What is the difference between Python
//meaning_of_life = 42
and C# ? Just a var ?
1 2 | //Point 2 - Self-declaring Variables var meaning_of_life = 42; |
Point 3 -– Those modules
It is the same code as Python
1 2 3 | foreach ( var file in EnumerateFiles( @"C:\" )){ WriteLine(file); } |
Point 4 – Simplicity of Data Structures
Quoting : Purists will say that you need all the different data types that C# provides, but trust me, you don’t.
I want to think about how to modelate a CallCenter waiting for phones – Stack or Queue ?
I want to think about how to modelate a CallCenter waiting for phones with business consumer that has priority ?https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.priorityqueue
Point 5 - Slicing
Same code in C#
1 2 3 4 | var sins = new []{ "pride" , "envy" , "gluttony" , "greed" , "lust" , "sloth" , "wrath" }; //var selected_sins = sins[1..(sins.Length-1)]; var selected_sins = sins[1..^1]; WriteLine(Join( " " , selected_sins)); |
Point 6 – For loops
Same syntax in C#
01 02 03 04 05 06 07 08 09 10 | foreach ( var i in Range(0,5)) { WriteLine(i); } // words in a string string [] words = { "Simple" , "Talk" }; foreach ( string word in words) { WriteLine(word); } |
Quoting : “(unlike in C#, where sometimes you use for and sometimes foreach)”
Please enumerate an array backwards in python without reversing
7 – List comprehensions
This is similar code in C#
1 2 | var nr = Range(1, 11).Where(it => it % 2 == 0).Select(it => Pow(it, 3)); WriteLine(Join( " " , nr)); |
8 – Sets
Same example
1 2 3 4 5 6 | //this contains some duplicates var languages = new [] { "C#" , "Python" , "VB" , "Java" , "C#" , "Java" , "C#" }; //more dense than Python languages = new HashSet< string >(languages).ToArray(); //this will give: ['C#', 'Java', 'Python', 'VB'] WriteLine(Join( " " , languages)); |
Second example
01 02 03 04 05 06 07 08 09 10 11 | //create two sets: Friends characters and large Antarctic ice shelves var friends = new [] { "Rachel" , "Phoebe" , "Chandler" , "Joey" , "Monica" , "Ross" }; var ice_shelves = new [] { "Ronnie-Filchner" , "Ross" , "McMurdo" }; // show the intersection (elements in both lists) WriteLine(Join( " " , friends.Intersect(ice_shelves))); //show the union (elements in either list) WriteLine(Join( " " , friends.Union(ice_shelves))); // show the friends who aren't ice shelves WriteLine(Join( " " , friends.Except(ice_shelves))); // elements in either set but not both -- more difficult WriteLine(Join( " " , friends.Union(ice_shelves).Except(friends.Intersect(ice_shelves)))); |
9 – Working with files and folders
1 2 3 4 | //# list of 3 people var people = new [] { "Shadrach" , "Meshach" , "Abednego" }; //# write them to a file File.WriteAllLines( @"C:\all\a.txt" , people); |
10 – The quality of online help
See https://docs.microsoft.com/ – good tutorials