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.

Comentarios

  1. 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...

    ResponderBorrar
  2. Deberia 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.

    ResponderBorrar
  3. Sauron:
    La 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

    ResponderBorrar
  4. Enrique:
    Este 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.

    ResponderBorrar
  5. Diego:
    Cualquiera 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.

    ResponderBorrar
  6. Hola

    En la parte de código donde actualizas en +10, la variable a utilizar no deberias ser &numeros y no &numero, eso saludos

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.