A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Inicializando arreglos y mejorando impresi贸n

18/32
Recursos

Es importante tener un c贸digo compacto siempre y cuando este favorezca la legibilidad del c贸digo.

A帽adiendo al inicio de nuestro archivo la l铆nea:

using static System.Console

Podremos escribir solo WriteLine cuando vayamos a imprimir algo en consola.

Aportes 59

Preguntas 8

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

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.

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.

"?"
No se va a verificar Cursos salvo que escuela sea diferente de null.

 if (escuela?.Cursos != null)  {

 }

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, 鈥渆xiste鈥 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.

Muy bien! creo que me estoy enamorando de C#!

llego el diablo cargado de bugs ! 鈥 jajajaja

alguien me puede puede explicar mas a fondo que significa el

escuela?.Courses !=null 

?

En este caso las condicionales que podremos encontrar son
Igual ==
Diferente !=
O ||
And &
equals

escuela?.Cursos != null que clase de brujeria es esta 馃榿

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.

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

Tambi茅n se puede simplificar las sentencias if para evaluar si es null utilizando ?? as铆:

private static void ImprimirCursosEscuela(Escuela escuela)
{
System.Console.WriteLine(鈥淐ursos de la escuela鈥);
foreach (var curso in escuela?.Cursos?? new Curso[0])
{
WriteLine([email protected]鈥淣ombre: {curso?.Nombre},
id: {curso?.UniqueId}鈥);
}
}

Tambi茅n podemos hacer algo como

static void ImprimirCursosEscuela(Escuela escuela)
{
    WriteLine("--------------------");
    WriteLine("Cursos de la escuela");
    WriteLine("--------------------");

    if (escuela.Cursos != null)
    {
        foreach (var item in escuela.Cursos)
        {
            Console.WriteLine($"ID: {item.ID} Nombre: {item.Nombre}");
        }
    }
    else
    {
        return;
    }
}

El metodo para imprimir los cursos de la escuela:

private static void ImprimirCursos(Escuela escuela)
    {
        System.Console.WriteLine("CURSOS DE LA ESCUELA");
        System.Console.WriteLine("====================");
        System.Console.WriteLine("nombre\t"+"id");
        if (escuela != null && escuela.cursos != null)
        {
            foreach (var curso in escuela.cursos)
            {
                System.Console.WriteLine($"{curso.name}\t{curso.UniqueId}");
            }
        }
    }

y pumm 鈥 se tote贸 ! ; jajajaj me totie de la risa pero que buena pedagogia tienes !

Me tom贸 algo de tiempo hacer el condificional con el ?. Pero ya m谩s claro y definitivamente si se sabe usar, queda mucho m谩s legible el c贸digo.

Excelente

Nos toc贸 un QA diablo 馃槃 馃槃 馃槃

que seria lo mas conveniente? realizar todas estas validaciones dentro de nuestra funcion? o que el mismo objeto se encargue de esto?

Corto circuito de expresi贸n de evaluaciones. Termino.

Buen tip el Alt+Shift para seleccionar varias lineas paralelas

static void Main(string[] args)
        {
            var escuela1 = new Escuela("Platzi Academy", 1994, TiposEscula.Universidad, ciudad: "Mexico");      //no olvidad agregar el namespace "using CoreEscuela.Entidades" 
            var escuela2 = new Escuela("Platzi University", 2000, TiposEscula.Universidad, ciudad: "Canada");

            //Array OTHER WAY to create
            var arregloCursos = new Curso[4]{
                        new Curso(){Nombre = "101"},
                        new Curso(){Nombre = "201"},
                        new Curso() { Nombre = "301", Jornada = TiposJornada.Tarde },
                        new Curso("The best curse ever", TiposJornada.Noche)
            };

            //Array OTHER WAY to create. NOT UED in this example
            Curso[] arregloCursos2 = {
                        new Curso(){Nombre = "401"},
                        new Curso(){Nombre = "501"},
                        new Curso() { Nombre = "601", Jornada = TiposJornada.Tarde },
                        new Curso("The best curse ever", TiposJornada.Noche)
            };
            //escuela1.Cursos = null;
            escuela1.Cursos = arregloCursos;

            escuela2.Cursos = new Curso[]{
                        new Curso(){Nombre = "C"},
                        new Curso(){Nombre = "C++"},
                        new Curso() { Nombre = "C#", Jornada = TiposJornada.Tarde },
                        new Curso("The best curse ever", TiposJornada.Noche)
            };

            ImprimirCursosEscuela(escuela1);
            ImprimirCursosEscuela(escuela2);
        }

        private static void ImprimirCursosEscuela(Escuela escuela)
        {
            //if(escuela != null && escuela.Cursos != null) //Corto circuito de expresion de evaluaciones
            if (escuela?.Cursos != null)
            { //Solo se verificara cursos, si escuela tambien es diferente de null.
                WriteLine("===================================");
                WriteLine($"======{escuela.Nombre}======");
                WriteLine("===================================");

                foreach (var curso in escuela.Cursos)
                {
                    WriteLine($"Nombre: {curso.Nombre}, Id: {curso.UniqueId}, Jornada: {curso.Jornada}");
                }
            }
            else
            {
                WriteLine("Esta escuala no existe o no tiene cursos");
                return;
            }
        }```

Alguien le sale alg煤n error al intentar agregar la propiedad curso[] en Escuela.cs?

Es importante tener un c贸digo compacto siempre y cuando este favorezca la legibilidad del c贸digo.

A帽adiendo al inicio de nuestro archivo la l铆nea:

using static System.Console
Podremos escribir solo WriteLine cuando vayamos a imprimir algo en consola.

Que signigica el simbolo ?

vaya vaya

Excelente!

// 'alt' + 'shift' ==> "seleccionar varias lineas"```

Excelente!

Teclas r谩pidas cuando el c贸digo est谩 desordenado:

alt + shift + f ==> ' para ordenar el c贸digo ;)'

Aporte r谩pido:

Se puede optimizar un poco m谩s el c贸digo si se utiliza la palabra reservada return seguido del if.

            if(escuela?.Cursos == null) return;
            foreach (var curso in escuela.Cursos)
            {
                WriteLine($"Nombre del curso: {curso.Nombre}, Id: {curso.UniqueId}");
            }

驴verdad?

Buenas clases

Muy bueno, pero creo que es mejor utilizar la List, del especio de nombre Generic

static void Main(string[] args)
{
var escuela = new Escuela(鈥淭elesup-Platzi鈥, 2012, TiposEscuela.Primaria,
ciudad: 鈥淟ima鈥, pais: 鈥淧eru鈥);

        var arregloCursos = new Curso[3] {

            new Curso(){ Nombre = "101"},
            new Curso(){ Nombre = "201"},
            new Curso(){ Nombre = "301"}

        };
        
                          
        Console.WriteLine(escuela);
        System.Console.WriteLine("=======================");
        ImprimirCursosForEach(arregloCursos);

Le agregue un else para que el usuario sepa por que no imprime en el caso no tenga cursos la escuela.

 private static void PrintCoursesSchool(School escuela)
        {
            WriteLine("==================");
            WriteLine("Cursos de la escuela");
            WriteLine("=====================");
            if (escuela?.Courses != null)
            {
                foreach (var curso in escuela.Courses)
                {
                    WriteLine($"Nombre: {curso.Name}, ID: {curso.UniqueId}");
                }
            }
            else
            {
                WriteLine("Tu escuela no tiene cursos");
            }

        }

Vemos como hacer mas compacto nuestro c贸digo, en que casos es mejor y, vemos el uso del operador de interrogaci贸n.

excelente cursos y tips para programar

Como los cursos pertenecen a una escuela, yo coloque el m茅todo de imprimir cursos en escuela, no le envio parametros, por que esta tom谩ndolo de this, de esta manera.

public void ImprimirCursos(){
WriteLine("=");
WriteLine(鈥淐ursos en la escuela鈥);
WriteLine("
=");
if(this?.Cursos!= null){
foreach (var curso in this.Cursos)
{
WriteLine($鈥淣ombre: {curso.Nombre} ID: {curso.UniqueId}鈥);
}
}
}

aunque en este caso this? esta muy muy redundante, ya que si no tienes definida la escuela (instanciando) no deber铆as poder listar cursos.

private static void ImprimirCursosEscuela(Escuela escuela)
{
WriteLine("=");
WriteLine(鈥淐ursos De La Escuela鈥);
WriteLine("
=");

        if (escuela.cursos != null)
        {



            foreach (var cursos in escuela.cursos)
            {
                WriteLine($"Nombre {cursos.Nombre}, Id {cursos.UniqueId}");

            }

        }
        else
        {
            WriteLine("No Existe Ningun Curso");
        }
    }

Mi codigo

 if (escuela?.Cursos == null)
            {
                return;
            }

 foreach (var curso in escuela.Cursos)
{
   WriteLine($"Nombre {curso.Nombre}. Id {curso.UniqueId}");
 }```

entre mas compacto se el codigo mejor siempre y cuando sea legible.

Muy bien como controlar la evaluaci贸n de los datos nulos en los par谩metros

En mac para seleccionar texto en columna es Shift + Option y arrastrar con el mouse

Un poco largo pero muy buen material

Con qu茅 fin usamos la palabra static?

el operador ?, creo que es opcional osea si hay null o no hay null, igual se ejecuta鈥
si alguien puede saber mejor gracias

    private static void ImprimirEscuelas(Escuela escuela)
        {
            Console.WriteLine("===================================");
            Console.WriteLine($"Escuela {escuela.Nombre}");
            Console.WriteLine("===================================");
            Console.WriteLine(escuela);
            Console.WriteLine($"============= Cursos =============");
            ImprimirCursos(escuela.Cursos);
            Console.WriteLine();
        }

Para abreviar los WriteLines.

 Console.WriteLine("=======\nCursos de la escuela\n=======");

Se toti贸, jajajajajajaja. Made in Colombia.

Falto resolver la duda de la comparaci贸n entre el for y el foreach. una explicaci贸n de porque el for es mas r谩pido?

Existen much铆simas formas de hacer lo mismo, seria interesante q se explique una forma mas practica, creo q el resto de formas se usara en dependencia con el proyecto q se haga

El c贸digo compacto es valido siempre y cuando favorezca la legibilidad del c贸digo.

Yo lo plantee as铆 para agregar el arreglo de cursos:

escuela.Cursos = new Curso[]{
	new Curso{Nombre = "101"},
        new Curso{Nombre = "201"},
        new Curso{Nombre = "301"}
};

Excelente Clase.

Maneras de inicializar arrays con objetos

Les recomiendo si quieren guardar c贸digo para futuras referencias pero que no haga tanto ruido usar regions.

#region Long version array definition

//var courses = new Course[3];

//courses[0] = new Course()
//{
//    Name = ".NET 101"
//};

//var secondCourse = new Course()
//{
//    Name = "C# 101"
//};

//courses[1] = secondCourse;

//courses[2] = new Course
//{
//    Name = "Object Oriented Programming"
//};
            
#endregion```

Usando Visual Studio Community, no he probado en Code.