PIENSOPIENSO: Cual es la salida de este programa?
Tengo un procedimiento GeneXus 9.0 que ejecuta el codigo
donde &Numeros y &Pares son dos SDT collection con la deficion:
Cual es la salida de este programa?
A)
NUMEROS=11 12 13 14 15 16 17 18 19 20
PARES = 2 4 6 8 10
B)
NUMEROS=1 2 3 4 5 6 7 8 9 10
PARES = 2 4 6 8 10
C)
NUMEROS= 11 12 13 14 15 16 17 18 19 20
PARES = 12 14 16 18 20
D)
NUMEROS= 1 2 3 4 5 6 7 8 9 10
PARES= 2 4 6 8 10
UPDATE: Agrego D) a pedido de Diego.
UPDATE II: La solucion es C). La explicacion esta en los comentarios.
donde &Numeros y &Pares son dos SDT collection con la deficion:
Cual es la salida de este programa?
A)
NUMEROS=11 12 13 14 15 16 17 18 19 20
PARES = 2 4 6 8 10
B)
NUMEROS=1 2 3 4 5 6 7 8 9 10
PARES = 2 4 6 8 10
C)
NUMEROS= 11 12 13 14 15 16 17 18 19 20
PARES = 12 14 16 18 20
D)
NUMEROS= 1 2 3 4 5 6 7 8 9 10
PARES= 2 4 6 8 10
UPDATE: Agrego D) a pedido de Diego.
UPDATE II: La solucion es C). La explicacion esta en los comentarios.
En realidad no debería ser ninguna de esas opciones, porque &Pares contiene números del 2 al 10 y &Numero contiene números del 11 al 20... creo...
ResponderBorrarEl viejo truco de los punteros...
ResponderBorrarDeberia ser la opción C ya que cuando hacemos &PARES.ADD(&NUMERO) lo que se almacena es un puntero al valor que tenga numero, y no el dato.
ResponderBorrarSauron:
ResponderBorrarLa solucion correcta en la C) y tu explicacion es correctisima.
Para lograr que se tengan dos SDTs independientes, o sea que al modificar el &Numeros no modifique el contenido de &Pares, deberia sustituir donde dice:
&Pares.Add(&Numero)
por
&Pares.Add(&Numero.clone())
con lo que conseguiría lugares de memoria diferentes para los elementos de la colección.
Como los SDT se van a usar cada vez mas y este es un problema que se plantea muy a menudo en la programación, me pareció bueno difundirlo
Enrique:
ResponderBorrarEste tema es algo muy común para quienes estamos acostumbrados a trabajar con lenguajes orientados a objetos como JAVA o .NET (yo relaciono los SDT como si de "clases" se tratara) sin embargo he notado que aquellos que pasaron de otro tipo de lenguajes a programar con GeneXus esto no les resulta tan natural.
Saludos.
Diego:
ResponderBorrarCualquiera que programó con C o C++ puede ver esto como muy natural, pero es difícil de asimilar a la forma de desarrollar con Genexus.
Cuando se eleva el nivel de abstracción, pueden pasar estos problemas, donde ver determinadas cosas desde un punto de vista mas elevado, dificulta entender el bajo nivel.
Hola
ResponderBorrarEn la parte de código donde actualizas en +10, la variable a utilizar no deberias ser &numeros y no &numero, eso saludos