Autor
|
Tema: Pregunta tonta [ Each & Static ] (Leído 4,136 veces)
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Hola forer @s, vengo a hacerles 2 preguntas que seguro les pareceran muy tontas y mas con la experiencia que tengo 1_ Cuando es posiblre usar la funcion Each, si no me equivoco es cuando tenes como una variable con matriz. 2_ La funcion Static para definir una variable, para que sirve ? Es para hacer una funcion y que la variable que vos definis obtenga el resultado ? Ej: Private Sub Form_Load() Dim Valor_Aqui As String Call Colocar(Valor_Aqui) End Sub
Private Sub Colocar(Variable as String) Static Variable Variable = 2 End sub Si mi teoria esta bien, cuando a Variable le asignamos 2, en realidad le estamos dando valor a Valor_Aqui Si no es como digo, por favor aclarenme para que es Static Y si tienen ganas, me dicen como serial la forma correcta de hacer mi ejemplo, para que 2 se guarde en Valor_Aqui ? Muchas Gracias
|
|
|
En línea
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
No hace falta el static, cuando envias un valor, por defecto lo hace por referencia, por lo tanto al cambiarlo lo cambias en el original xD Private Sub Form_Load() Dim Valor_Aqui As String Call Colocar(Valor_Aqui) End Sub
Private Sub Colocar(Variable as String) Variable = 2 End sub Si lo usas como función Private Sub Form_Load() Dim Valor_Aqui As String Valor_Aqui=Colocar() End Sub
Private function Colocar() Colocar = 2 End function Según la MSDN: EACH For Each...Next (Instrucción)
Repite un grupo deinstrucciones para cada elemento de unamatriz ocolección.
Sintaxis
For Each elemento In grupo [instrucciones] [Exit For] [instrucciones]
Next [elemento]
La sintaxis de la instrucción For Each...Next consta de las siguientes partes:
Parte Descripción elemento Requerido.Variable que se utiliza para iterar por los elementos del conjunto o matriz. Para conjuntos, elemento solamente puede ser una variable deltipo Variant, una variable de objeto genérica o cualquier variable de objeto específica. Para matrices, elemento solamente puede ser una variable tipo Variant. grupo Requerido. Nombre de un conjunto de objetos o de una matriz (excepto una matriz detipos definidos por el usuario). instrucciones Opcional. Una o más instrucciones que se ejecutan para cada elemento de un grupo.
Comentarios
La entrada al bloque For Each se produce si hay al menos un elemento en grupo. Una vez que se ha entrado en el bucle, todas las instrucciones en el bucle se ejecutan para el primer elemento en grupo. Después, mientras haya más elementos en grupo, las instrucciones en el bucle continúan ejecutándose para cada elemento. Cuando no hay más elementos en el grupo, se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next.
Se pueden colocar en el bucle cualquier número de instrucciones Exit For. La instrucción Exit For se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then) y transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next.
Puede anidar bucles For Each...Next, colocando un bucle For Each...Next dentro de otro. Sin embargo, cada elemento del bucle debe ser único.
Nota Si omite elemento en una instrucción Next, la ejecución continúa como si se hubiera incluido. Si se encuentra una instrucción Next antes de su instrucción For correspondiente, se producirá un error.
No se puede utilizar la instrucción For Each...Next con una matriz de tipos definidos por el usuario porque un tipo Variant no puede contener un tipo definido por el usuario.
STATIC Static (Instrucción)
Se usa en elnivel de procedimiento para declararvariables y asignarles espacio de almacenamiento. Las variables declaradas con la instrucción Static conservan su valor mientras el código se está ejecutando.
Sintaxis
Static nombre_variable[([subíndices])] [As [New] tipo] [, nombre_variable[([subíndices])] [As [New] tipo]] . . .
La sintaxis de la instrucción Static consta de estas partes:
Parte Descripción nombre_ variable Requerido. Nombre de la variable; sigue las convenciones estándar de nombres de variable. subíndices Opcional. Dimensiones de una variable dematriz; se pueden declarar hasta 60 dimensiones múltiples. Elargumento subíndices usa la sintaxis siguiente: [inferior To] superior [,[inferior To] superior] . . .
Cuando no se declara explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. Este límite inferior es cero si no hay ninguna instrucción Option Base. New Opcional.Palabra clave que permite la creación implícita de un objeto. Si utiliza New cuando declara lavariable de objeto, se crea una nueva instancia del objeto como primera referencia, de forma que no tiene que utilizar la instrucción Set para asignar la referencia del objeto. La palabra clave New no se puede utilizar para declarar variables de cualquiertipo de datos intrínseco ni para declarar instancias de objetos dependientes. tipo Opcional. Tipo de datos de la variable; puede serByte,Boolean,Integer,Long,Currency,Single,Double,Decimal (no admitida actualmente),Date,String, (para cadenas de longitud variable), String * length (para cadenas de longitud fija),Object,Variant, untipo definido por el usuario, o untipo de objeto. Use una cláusula As tipo distinto para cada variable que defina.
Comentarios
Una vez que el código delmódulo se está ejecutando, las variables declaradas con lainstrucción Static conservan su valor hasta que se reinicie o restablezca el módulo. En losmódulos de clase, las variables declaradas con la instrucción Static conservan su valor en cada instancia de clase hasta que se destruye la instancia. Enmódulos de formulario, las variables estáticas conservan su valor hasta que se cierra el formulario. Use la instrucción Static enprocedimientos no estáticos para declarar explícitamente variables que son visibles sólo dentro de un procedimiento, pero cuya vida es la misma que la del módulo en la que se definió el procedimiento.
Utilice una instrucción Static dentro de un procedimiento para declarar el tipo de datos de una variable que conserva su valor entre llamadas a procedimiento. Por ejemplo, la instrucción siguiente declara una matriz de enteros de tamaño fijo:
Static NúmeroDeEmpleados(200) As Integer
La siguiente línea declara una variable para una nueva instancia de una hoja de cálculo:
Static X As New Worksheet
Si la palabra clave New no se utiliza al declarar una variable de objeto, la variable que hace referencia a un objeto debe asignarse a un objeto existente mediante la instrucción Set antes de poder utilizarla. Antes de que se le asigne un objeto, la variable de objeto declarada tiene el valor especial Nothing, que indica que no hace referencia a ninguna instancia en particular de un objeto. Cuando utiliza la palabra clave New en ladeclaración, se crea una instancia del objeto en la primera referencia del mismo.
Si no especifica un tipo de datos o un tipo de objeto y no existe una instrucción Deftipo en el módulo, la variable es Variant de manera predeterminada.
Nota La instrucción Static y la palabra clave Static son similares, pero se utilizan para conseguir efectos diferentes. Si declara un procedimiento con la palabra clave Static (como en Static Sub ContarVentas()), el espacio de almacenamiento correspondiente a todas las variables locales dentro del procedimiento se asigna una única vez y el valor de las variables se conserva durante todo el tiempo que se esté ejecutando el programa. Para procedimientos no estáticos, el espacio de almacenamiento para las variables se asigna cada vez que se llama al procedimiento y se libera cuando se sale del procedimiento. La instrucción Static se usa para declarar variables específicas dentro de procedimientos no estáticos para conservar su valor mientras el programa se esté ejecutando.
Al inicializar las variables, una variable numérica se inicializa a 0, una cadena de longitud variable se inicializa a una cadena de longitud cero ("") y una cadena de longitud fija se rellena con ceros. Las variables Variant se inicializan aEmpty. Cada elemento de una variable de un tipo definido por el usuario se inicializa como si fuera una variable distinta.
Nota Cuando utilice instrucciones Static dentro de un procedimiento, colóquelas al principio del procedimiento con otras instrucciones de declaración como Dim.
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Gracias Hans por lo del Each, pero con el Static yo me referia a como funciona el Winsock por ejemplo. Ej: Private Sub Winsock1_DataArrival(BytesTotal as integer) Dim Datos As String Winsock1.GetData Datos End Sub Yo quiero saber como hacer lo que hace el Winsock, que vos le das el nombre de la variable y te almacena ahi los datos de entrada, y ahi no es como vos me dijiste, a esos 2 metodos ya los conocia yo. No se como hacer para que pongo y me guarde en Datos el valor (Datos es una parametro)
|
|
« Última modificación: 21 Junio 2007, 18:23 pm por Sancho.Mazorka »
|
En línea
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
pués dilo antes xD no sé si te he entendido pero ahí vamos xD el winsock es un objeto/clase... cuando haces lo de los datos es el "buffer" de lectura del dato interno... éste método se llama encapsulación... creo que no tiene otro para cambiar el valor que ha recibido, de hecho no tendría mucho sentido para que te guarde el valor, simplemente asignas... y si quieres asegurarte de que va a cambiarlo pasas el valor como ByRef (es el modo predeterminado) y listo dim datos as string procedimiento datos
Private Sub procedimiento(ByRef algo as string) algo="pepito el de los palotes" End Sub
no se si te entendí xD
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Entonces el que se encarga de hacer lo que pregunte es el ByRef ? Creo que esa era mi respuesta, ahora voy a probar, muchas gracias Hans, sos el unico que se molesto!
|
|
|
En línea
|
|
|
|
ranslsad
Desconectado
Mensajes: 492
Dim Ranslsad as String * :P - Que Vicio!
|
sos el unico que se molesto!
Amigo yo con mi experiencia conocia eso y siempre me pregunte pero nunca tuve idea sobre como se hacia.. muchos (o por lo menos yo) leo y miro si se y si no se a veces busco aprendo y respondo.. asi que muchos no se interesan pero otros no saben... Bueno... Salu2 Ranslsad (lo vi en el quote)
|
|
|
En línea
|
|
|
|
ranslsad
Desconectado
Mensajes: 492
Dim Ranslsad as String * :P - Que Vicio!
|
dim datos as string procedimiento datos
Private Sub procedimiento(ByRef algo as string) algo="pepito el de los palotes" End Sub
Mira por ejemplo.. quiero haceer dos cosas... si pongo procedimiento box sale un msgbox pero si pongo procedimiento text se cambia un text o algo.. como seria el temita? Salu2 Ranslsad (sry por el doble post...) Edit: dando un poco de vueltas me di cuenta de eso!! y me encanto hans esto lo quise saber de hace tanto tiempo y nunca me dio por buscar.. gracias!! mira lo que hice.. Private Sub Command1_Click() ema InputBox("Ema", "Escribe") End Sub
Function ema(ByRef emaa) MsgBox emaa End Function
estas cosas tan sencillas son tan dificiles de encontrar (??) Salu2 Ranslsad!!!
|
|
« Última modificación: 21 Junio 2007, 23:17 pm por ranslsad »
|
En línea
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
el by ref es el modo estandar de enviar los datos que tiene visual (por referencia) usease son una especie de punteros que apuntan a la variable inicial, el tema esta en que eso de poner by ref no surte efecto ya que por defecto lo envia por referencia... por contrapunto se suele poner by val cuando no quieres que cambie el valor y tal sos el unico que se molesto! eso no me hace ni mejor ni peor, cada uno aporta lo que puede y quiere xD
|
|
« Última modificación: 22 Junio 2007, 02:07 am por Hans el Topo »
|
En línea
|
|
|
|
ranslsad
Desconectado
Mensajes: 492
Dim Ranslsad as String * :P - Que Vicio!
|
Ah.. yo estuve investigando y me fui dando cuenta de las cosas oye.. 1º > ByRef no hace falta.. 2º > Cuantas mas variables creas mas opciones podes reflejar al llamarlo, por ejemplo: Public Function ema(ema2 As String, ema3 As String) MsgBox ema2 & " | " & ema3 End Function
Private Sub Command1_Click() ema "hola", "chau" End Sub
Me gusta y lo seguire investigando Salu2 Ranslsad
|
|
|
En línea
|
|
|
|
Zeroql
Desconectado
Mensajes: 957
Todo lo k sucede sucede por una razon
|
miren la propiedad static es para hacer las cosas que se keden en un puntos sin cambios del usuario. creo que con eso solucinan tanta discucion. bueno espero que mi acote les sirva de algo
|
|
|
En línea
|
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo. /.-ZEROQL.-\ ----- #937675#
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
DUDA invalid use of non-static member
Programación C/C++
|
hari
|
2
|
2,442
|
30 Junio 2011, 19:13 pm
por hari
|
|
|
Problema con control STATIC
Programación C/C++
|
Riki_89D
|
6
|
2,826
|
22 Septiembre 2011, 18:14 pm
por naderST
|
|
|
Pasar de Static Linking a Dynamic Linking.
« 1 2 »
Programación C/C++
|
APOKLIPTICO
|
18
|
7,471
|
9 Agosto 2012, 23:46 pm
por [Zero]
|
|
|
Mientro static dentro de clase static, simbolo externo sin resolver
Programación C/C++
|
patilanz
|
3
|
3,335
|
8 Septiembre 2016, 16:15 pm
por ivancea96
|
|
|
[Resuelto] [Pregunta]: Deprecated Non-static method users
PHP
|
Leguim
|
4
|
2,888
|
13 Febrero 2020, 02:07 am
por Leguim
|
|