Skip to content

ucudal/PII_Ayuda_Csharp_Python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 

Repository files navigation

UCU

FIT - Universidad Católica del Uruguay


Ayuda de C# para programadores Python

Si sabes programar en Python, este documento puede servirte para saber cómo hacer en C# las cosas que ya sabes hacer. No es una referencia completa, sólo incluimos algunos aspectos de los lenguajes.

C# es un lenguaje compilado a lenguaje intermedio con tipos de datos estáticos.

Python es un lenguaje interpretado con tipos de datos dinámicos.

El ciclo habitual de desarrollo en C# implica editar uno o más archivos de código fuente, compilar los archivos de texto para producir un archivo binario en lenguaje intermedio, y ejecutar ese archivo binario en el entorno en tiempo de ejecución.

El ciclo habitual de desarrollo en Python implica ingresar una o más expresiones en un evaluador, que evalúa la expresión e imprime el resultado. También es posible desarrollar en Python editando uno o más archivos de código fuente, y ejecutar esos archivos con el intérprete de Python.

Los bloques de código en Python se definen mediante sangría en el código fuente, mientras que en C# se utiliza { al comienzo de un bloque y } al final.

Mientras es posible tener código Python en funciones o en métodos que pueden ser usados en expresiones, en C# el código sólo está en los métodos; no hay funciones “libres”. Algo análogo ocurre con las variables: mientras en Python puedo declarar variables globales, en C# las variables sólo pueden ser declaradas en las instancias de las clases, o en las propias clases; esto último equivale a las variables de instancia y de clase, respectivamente, que existen en Python.

Otras correspondencias o diferencias puedes encontrarlas en la tabla a continuación.

Python C#
Comentarios en línea: # Comentarios en línea: // 1
Comentarios en múltiples líneas comienzan y terminan con """ Comentarios en múltiples líneas comienzan con /* y terminan con */
if…, if…else, if…elif if…, if…else, switch…case…default
for i in range(0, 3)… for (int i = 0; i <=3; i++)…, foreach… 2
while (i < 3)… while (i < 3)…
and, or, not & y &&3,| y |3|, !
<, <=, >, >=, ==, != <, <=, >, >=, ==4, !=
+, -, *, /, +=, -=, *=, /= +, -, *, /, +=, -=, *=, /=5
bool bool, Boolean6
float float, Single7
int int, Int328
str string, String9
Asignar el valor y a la variable x: x = y Asignar el valor x a la variable y del tipo T: T x = y10
Crear una instancia de una clase C y asignarla a la variable x: x = C() Crear una instancia de una clase C y asignarla a la variable x: C x = new C();
float(…) Convert.ToSingle(…), Single.Parse(…)11
int(…) Convert.ToInt32(…), Int32.Parse(…)11
str(…) Int32.ToString(…), Single.ToString(…)11
Cuando demo es una variable que contiene una instancia de string, demo[0]referencia el primer carácter, demo[-1] el último, demo[2:4] referencia una porción del segundo al cuarto carácter, y demo[:4] una porción del primero al cuarto carácter Cuando demo es una variable que contiene una instancia de String, demo[0] referencia el primer carácter, demo[^0] el último, demo[1..4] referencia una porción del segundo al cuarto carácter, y demo[..4] una porción del primero al cuarto carácter.1213
def… No hay un solo equivalente en C#; para los métodos la sintaxis depende de la visibilidad, si retorna un resultado o no, el tipo de datos del resultado, y otros factores.
class… class…
self this14
@classmethod static
cls El nombre de la clase
pass Un bloque vacío {} o un ; puede ser similar en algunos casos, pero no existe una equivalencia exacta
raise… throw…
with… using…15 es similar, pero no existe una equivalencia exacta
print(…) Console.WriteLine(…)
input() Console.ReadLine()16
assert… Debug.Assert(…) es similar, pero se trata de una invocación y no de una palabra clave
yield La palabra clave yield, existe en C#, pero no tiene exactamente el mismo uso que en Python
import No hay un equivalente exacto en C# porque los ensamblados -análogos a los módulos o paquetes en Python- sólo pueden ser cargados dinámicamente mediante una API, a diferencia de Python que siempre son cargados dinámicamente. using es una directiva en C# que permite referenciar tipos en un espacio de nombres sin calificarlos.
list = [1,2,3] List<int> list = new List<int>([1, 2, 3])17
list[0] list[0]
list.append(4) list.Add(4)
4 in list list.Contains(4)
list.remove(4) list.Remove(4)
print(list) Console.WriteLine(String.Join(", ", list.ToArray()));
dict = {"Uno": 1x,"Dos": 2,"Tres": 3} Dictionary<string, int> dict = new Dictionary<string, int>() { {"Uno", 1}, {"Dos", 2}, {"Tres", 3}}
dict[0] dict[0]
dict["Cuatro"] = 4 dict.Add("Cuatro", 4)
"Uno" in dict dict.Keys.Contains("Uno")
dict.pop("Cuatro") dict.Remove("Cuatro")
print(dict) Console.WriteLine(String.Join(", ", dict.Select(k => k.Key + ": " + k.Value)))

En un programa de consola en C# el punto de entrada, esto es, lo primero que se ejecuta cuando se corre el programa, típicamente es un método de clase declarada como static void Main(string[] args) o static void Main(). Ver https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/


_1 Los comentarios en línea que comienzan con tres /// tienen un significado especial para generar documentación externa. Ver: https://docs.microsoft.com/en-us/dotnet/csharp/codedoc

_2 La cláusula foreach en C# es similar a la cláusula for en Python cuando se usa con iterables.

_3 La diferencia es si se evalúa el segundo operando. Ver https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators#logical-and-operator- y https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators#conditional-logical-and-operator-

_4 En C# el operador == compara si dos objetos son el mismo; excepto para las instancias de la clase String, donde compara el valor. El operador == puede ser sobrescrito.

_5 Mientras /= aplicado a objetos de tipo int en Python da como resultado un objeto de tipo float, en C# da un objeto de tipo int siempre.Ver https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/division-operator.

_6 En C# la palabra clave bool es un alias para el tipo System.Boolean.

_7 En C# la palabra clave float es un alias para el tipo System.Single.

_8 En C# la palabra clave int es un alias para el tipo System.Int32.

_9 En C# la palabra clave string es un alias para el tipo System.String.

_10 Aquí se muestra la declaración de la variable x del tipo T y la asignación del valor y a la variable x en la misma sentencia; es equivalente a T x; y luego x = y;. Vean que en Python no se declara el tipo de la variable, mientras en C# sí. La variable x es del tipo de y en Python, no es que no tenga tipo. Algo similar ocurre en C# al usar la palabra clave var al declarar una variable: var x = y; es equivalente a T x = y; si T es el tipo de y.

_11 Mientras float(), int() y str() son cast -conversión de tipos- en Python, los mostrados como correspondientes en C# son métodos; el concepto de cast existe en C# pero no se usa aquí como en Python.

_12 Ver más del manejo de índices con C#: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/ranges-indexes.

_13 Solamente válido con netCore 3.x o superior y C# 8.0 o superior https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8.

_14 La primera variable de un método en Python referencia al objeto que recibe el mensaje que ocasiona la ejecución de ese método, y suele llamarse self. En C# esa referencia se obtiene mediante la palabra clave this, y no es un parámetro del método

_15 En C# using es tanto una directiva para importar un módulo como una sentencia para asegurar la ejecución de destructores.

_16 Mientras input en Python permite mostrar un mensaje además de leer un valor, Console.ReadLine() en C# sólo lee un valor; para mostrar un mensaje, puedes usar Console.Write() o Console.WriteLine().

_17 La clase ArrayList de C# puede contener objetos de cualquier tipo al igual que las listas de Python, sin embargo, puede ser preferible usar List<T> donde T es un nombre de clase, para tener listas que contengan objetos sólo del tipo T. Los ejemplos que siguen son iguales para ArrayList y para List<T>. Para usar List<T> es necesario incluir el espacio de nombres System.Collections.Generic.

About

Documento de apoyo para los desarolladores Python que comienzan con C#

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published