Es posible escribir C# más claro, compacto y seguro cuando entendemos cómo inicializar arreglos, asignarlos a propiedades y manejar null sin errores. Aquí verás cómo refactorizar código paso a paso, crear un método para imprimir cursos y aplicar atajos como using static y el operador de interrogación para mejorar la legibilidad.
¿Cómo inicializar arreglos en C# de forma limpia?
Un código compacto debe favorecer la legibilidad. No siempre lo más corto se entiende mejor. La idea es equilibrar claridad y brevedad.
¿Qué formas de inicialización mejoran la legibilidad?
Declarar y poblar el arreglo en una sola expresión.
Evitar dispersar variables que no se usan.
Mantener una estructura consistente para leerlo fácil.
Ejemplos equivalentes:
// Especificando tamaño y elementosauto cursos =newCurso[3]{ curso101, curso2, curso3 };// Omite el tamaño si ya pasas los elementos (el "3" sobra)var cursos =newCurso[]{ curso101, curso2, curso3 };// Tipo explícito y sin "new" redundanteCurso[] cursos ={ curso101, curso2, curso3 };
¿Por qué evitar redundancia al declarar tamaño?
Si ya agregas 3 elementos, no necesitas indicar [3] explícitamente.
Reducir ruido visual ayuda a mantener el código claro.
¿Cuándo usar var vs tipo explícito?
var es válido cuando el tipo es evidente por la derecha.
Si prefieres claridad explícita, usa Curso[].
¿Cómo asignar arreglos a propiedades y refactorizar la impresión?
Una vez creado el arreglo, puedes asignarlo a la escuela y encapsular la impresión en un método reusable.
¿Cómo imprimir cursos de una escuela con un método?
Extrae la lógica en un método con un nombre claro.
Agrega un título para dar contexto.
voidImprimirCursosEscuela(Escuela escuela){ Console.WriteLine("===================="); Console.WriteLine("Cursos de la escuela"); Console.WriteLine("====================");foreach(var curso in escuela.Cursos){ Console.WriteLine(curso);}}
Con using static System.Console; puedes escribir menos.
Evita repetir Console. en cada línea.
usingstaticSystem.Console;voidImprimirCursosEscuela(Escuela escuela){WriteLine("====================");WriteLine("Cursos de la escuela");WriteLine("====================");foreach(var curso in escuela.Cursos){WriteLine(curso);}}
¿Cómo reducir código repetitivo en WriteLine?
Reemplaza Console.WriteLine por WriteLine tras el using static.
Menos ruido, misma intención. Más legible.
¿Cómo manejar null con seguridad y código compacto?
Los errores por NullReference ocurren cuando iteras o accedes a propiedades sin inicializarlas. Diferencia entre null y arreglo vacío.
¿Qué diferencia hay entre null y arreglo vacío?
null: no hay referencia. Iterar rompe el programa.
new Curso[0]: arreglo vacío. Iterar no imprime nada, pero no falla.
escuela.Cursos =null;// peligro: iterar lanza excepciónescuela.Cursos =newCurso[0];// seguro: foreach no imprime elementos
¿Cómo protegerse con if, operadores ==, != y cortocircuito?
Verifica escuela != null antes de acceder a sus propiedades.
Usa && para aprovechar el cortocircuito: si la primera condición falla, no evalúa la segunda.
if(escuela !=null&& escuela.Cursos !=null){foreach(var curso in escuela.Cursos){WriteLine(curso);}}
¿Cómo simplificar con el operador de interrogación?
El operador ?. evita acceder a miembros cuando la referencia es null.
Úsalo para accesos seguros a propiedades encadenadas.
// Acceso seguro a la propiedad (no evalúa Cursos si escuela es null)var cursos = escuela?.Cursos;// Si necesitas iterar con seguridad, combínalo con coalescenciaforeach(var curso in(escuela?.Cursos)?? Array.Empty<Curso>()){WriteLine(curso);}
Ideas clave:
Inicializa arreglos de forma compacta, sin redundancias.
Extrae métodos para responsabilidades claras (imprimir cursos).
Reduce ruido con using static para WriteLine.
Controla null con if, && (cortocircuito) y ?..
¿Te gustaría ver variantes con filtros, LINQ o validaciones adicionales? Cuéntame en qué parte quieres profundizar y qué error te encuentras al implementar.
El carácter ? usado dentro de una condicional que contenga como parámetro de evaluación un objeto con un atributo, sirve para indicarle a C# que solamente después de verificar la condición en el objeto y esta sea verdadera, pase a verificar la condición en el atributo.
:thumbsup:
Con Ctrl + d pueden seleccionar palabras iguales en diferentes lineas. Se posicionan en la palabra que desean seleccionar y presionan Ctrl + d y se van seleccionando las palabras iguales que va encontrando el editor.
Muy buen aporte. Me ha servido mucho.
Muy buen aporte muchas gracias !
== Comparación
!= Diferente
&& y
Agrego el OR a tu aporte.
|| OR / O
También existe la comparación === en la cual se exige que no sólo el valor sea igual si no que también sea del mismo tipo de dato.
"?"
No se va a verificar Cursos salvo que escuela sea diferente de null.
if(escuela?.Cursos!=null){}
esto esta muy vacano
Excelente! 👍
Es muy distinto tener un arreglo sin posiciones a tener un arreglo nulo
arreglo = null → arreglo nulo
arreglo = new arreglo → arreglo sin posiciones
la diferencia es que el arreglo sin posiciones ya está inicializado, “existe” dentro del flujo de mi programa, mientras que el arreglo nulo no.
Corto circuito de expresión de evaluaciones
Cuando se tienen dos condiciones por validar en una instrucción if usando la expresión **and ** el programa evaluará en orden las condiciones y en caso de que la primera sea falsa ya no evaluará la segunda y se saltara el bloque de codigo.
en caso de que se usará un **or **si la primera condición verdadera ya no evalúa la segunda entrará al bloque de codigo.
Asu ya me perdi
La lógica de lo que hace el profesor es que hay un objeto escuela y un arreglo con cursos, pero cuando hayan varias escuelas y varios objetos con cursos, será un programa muy difícil de entender.
Entonces lo mejor es que cada escuela tenga los cursos almacenados adentro de su objeto Escuela.
escuela?.Cursos != null que clase de brujeria es esta 😁
Lógica Trinaria xD
Ese código de "if(escuela?.Curso != null) { ..." no lo sabía. Excelente clase!
También lo vi y me parecio excelente
Es genial este código y me parece genial que se muestre desde la forma larga a la mas compacta.
llego el diablo cargado de bugs ! ... jajajaja
alguien me puede puede explicar mas a fondo que significa el
escuela?.Courses!=null
?
El operador "?" significa que no se va a verificar Courses salvo que escuela sea diferente de null.
Gracias, después de varios videos donde a mi parecer se iba por encima y sin profundizar lo importante, ya veo ahora algunas cosas nuevas de .net que no había usado antes.
Muy bien! creo que me estoy enamorando de C#!
Tengo una duda ¿Cuando ocupamos la palabra "Static"?
Como en el ejemplo que lo ocupa en el metodo static void ImprimirCursos
Espero pueda ayudarme, gracias
¡Hola!
Normalmente un método estática lo crearás cuando no necesitas que sea necesaria la creación de una instancia de la clase para poder usarlo. Si no que puedas usarlo directamente, ya que cuando son estáticos pertenecen directamente a la clase y no a la instancia, por lo que el método siempre será el mismo para todos los objetos creados.
Aquí puedes leer un poco más el respecto :D
Hola Ricardo
Como indica Luis, un metodo estatico lo puedes acceder sin necesidad de crear una instancia de clase, por lo que es muy util cuando tienes funciones recurrentes en tu aplicacion, es decir, metodos que vas a llamar varias veces en distintas partes de tu codigo, cosas como por ejemplo hacer el calculo de determinada operacion (calcular una nota, sacar un promedio,etc).
Hola a todos, que sucedería si se declara
using static System.Console;
using static Object;
donde object tiene un método llamado
WriteLine, ¿en este caso se tendría que identificar el objeto que se esta usando?
En este caso las condicionales que podremos encontrar son
Igual ==
Diferente !=
O ||
And &
equals
En caso de que alguno no lo sepa visual code nos permite acceder rápidamente a los elementos del mismo nombre con [Ctrl ] + [D ] sobre la palabra o lo seleccionado
Me perdí por un momento cuando enseño varias formas de crear el objeto curso, ¿Cual seria una forma adecuada para crear objetos?
Debería mencionar por que usar
privatestatic
en la creación de métodos.?
estimados, que esta diciendoo esta linea?
escuela.Cursos
gracias
Hola Jose
quiere decir que tienes una instancia de una clase / objeto llamada escuelas y que estas accediendo a la Propiedad 'Curso' de esta instancia/objeto.
Recuerda que cuando manipulas un objeto si usas '()' parentesis al final estas llamando a uno de sus metodos, si no los usas esta llamando a una de sus propiedades.