• Miércoles 20 de Noviembre de 2024, 16:24

Autor Tema:  Forma Elegante...  (Leído 7287 veces)

Neko-sama

  • Miembro activo
  • **
  • Mensajes: 99
    • Ver Perfil
Forma Elegante...
« en: Jueves 6 de Octubre de 2005, 21:50 »
0
Hola a todos...

es sobre la forma de escribir C++

por lo que se... esta la forma tradicional o comun pero entiendo que existe como una forma mas elegante de escribir el mismo codigo pero que no es tan legible...

un ejemplo tonto sería decir que:
es mejor poner i++ que i = i + 1.

es verdad??
que quiere decir esto??
ocurre con todo el codigo??
donde se aprende??
resulta mas rapida la ejecucion??
para que se utilizaría??
o solo es un asunto de un buen diseño??

eso
 :lol:

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Forma Elegante...
« Respuesta #1 en: Jueves 6 de Octubre de 2005, 22:03 »
0
Escribir i++ es simplemente un short hand, o método abreviado....Y es exactamente lo mismo que escribir i = i + 1, solamente que más corto y mas bonito  B)  Lo malo es que solo te sirve para aumentar el valor de la variable en 1  :lol:

Supongo que se aprende leyendo tutoriales y revisando códigos de otros programadores........Realmente no se que tantos short hand's existan en C++.........

Saludos,

Blag  :devil:

ecolve

  • Miembro activo
  • **
  • Mensajes: 75
  • Nacionalidad: co
    • Ver Perfil
    • http://twitter.com/ecolve
Re: Forma Elegante...
« Respuesta #2 en: Jueves 6 de Octubre de 2005, 22:50 »
0
:comp:

Hola......I++ es el incremento de un contador,es la forma corta de I=I+1 y como dice el compañero Blag es solo para incrementar de uno en uno....al igual que el I-- es para decrementar de uno en uno.......ya para aumentar el contador con otro valor si te toca utilizar I=I+X....siendo "X" el valor a incrementar....chao....

 :kicking:
"...everything that has a beginning, has an end..."

http://twitter.com/ecolve
Edwin C. <ecolve>

<<== 11101 ==>>

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #3 en: Viernes 7 de Octubre de 2005, 00:56 »
0
Por lo menos para VC++ x += 1 y x++ es exactamente lo mismo pero no es equivalente a x = x + 1 que ocupa mas codigo. Y de cualquier manera la ultima opcion no es logica teniendo la posibilidad de hacer la suma sobre el operado (+=).

 :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Neko-sama

  • Miembro activo
  • **
  • Mensajes: 99
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #4 en: Viernes 7 de Octubre de 2005, 05:33 »
0
por lo que entiendo la instrucción
 
i++ No es lo mismo que la i = i + 1,  claro... hacen la misma cosa pero internamente la instruccion i++ incrementa directamente el valor de i en 1 mientras que la i = i + 1 primero internamente suma el valor de i con 1 y lo deja en otra variable para luego asignarselo a i nuevamente...  osea...  es mas lento.

yo se bien lo que es i++ o   i--   o   i+=5

solo era un ejemplo...

lo que pasa es que he visto codigo en c++ muy raro y que supuestamente es la forma mas directa de hacer cosas...  un poco para allá va apuntada mi pregunta...

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #5 en: Viernes 7 de Octubre de 2005, 07:18 »
0
bueno, de abreviaciones está lleno el C...  :D puede parecer código "raro" pero es precisamente esas capacidades y facilidades que han hecho tan popular al C y sus descendientes.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #6 en: Viernes 7 de Octubre de 2005, 07:38 »
0
Cita de: "Neko-sama"
por lo que entiendo la instrucción
 
i++ No es lo mismo que la i = i + 1,  claro... hacen la misma cosa pero internamente la instruccion i++ incrementa directamente el valor de i en 1 mientras que la i = i + 1 primero internamente suma el valor de i con 1 y lo deja en otra variable para luego asignarselo a i nuevamente...  osea...  es mas lento.

yo se bien lo que es i++ o   i--   o   i+=5

solo era un ejemplo...

lo que pasa es que he visto codigo en c++ muy raro y que supuestamente es la forma mas directa de hacer cosas...  un poco para allá va apuntada mi pregunta...
Eso dependera del compilador, en este caso VC++ no hace un inc sino un add  :smartass:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Neko-sama

  • Miembro activo
  • **
  • Mensajes: 99
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #7 en: Viernes 7 de Octubre de 2005, 18:02 »
0
Cita de: "Amilius"
bueno, de abreviaciones está lleno el C...  :D puede parecer código "raro" pero es precisamente esas capacidades y facilidades que han hecho tan popular al C y sus descendientes.
como cuales??

hay alguna forma rapida de dejar un arreglo con todos sus valores en 0??
sin hacer un loop para recorrerlo...


existe algun truco bueno??
algo que no aparezca en los libros

eso busco... :rolleyes:

Alpha_

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #8 en: Viernes 7 de Octubre de 2005, 20:34 »
0
Hmm bueno, si estás buscando sobre maneras elegantes de escribir, buscá "C++ style" en Google, hay miles y miles de libros para hacer el código legible.

Sobre técnicas raras.. hmm... lo único que me viene a la mente es asignar varias variables simultáneamente, que es realmente muy útil, por ejemplo.

valor1 = valor2 = valor3 = promedio = contador = suma = 0;

(etc, etc)...
Alpha
http]

scullyERA

  • Miembro activo
  • **
  • Mensajes: 42
  • Nacionalidad: 00
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #9 en: Viernes 11 de Noviembre de 2005, 17:57 »
0
Algunas de las "abreviaturas en C y C++" que conozco son:
variable++; //incremento en uno
variable--;// decremento en uno
variable+= valor; //a variable se le suma valor (variable= variable + valor)
variable-= valor; //a variable se le resta valor (variable= variable - valor)
variable*= valor; //variable se multiplica por valor (variable= variable * valor)
variable/= valor; //variable se divide entre valor (variable= variable / valor)
variable%= valor; //se obtiene residuo de variable entre valor (variable= variable % valor)

Pero muchas veces es mejor ser "explicito" para que otros programadores que no las conocen entiendan mejor nuestro código (recuerda que lo más importante es tener claridad en el código y no el tamaño que ocupe tu código en disco).
Al respecto de la velocidad entre una instrucción y otra yo opino que la diferencia es mínima.

Citar
i++ No es lo mismo que la i = i + 1, claro... hacen la misma cosa pero internamente la instruccion i++ incrementa directamente el valor de i en 1 mientras que la i = i + 1 primero internamente suma el valor de i con 1 y lo deja en otra variable para luego asignarselo a i nuevamente... osea... es mas lento.

judamo

  • Miembro activo
  • **
  • Mensajes: 74
  • Nacionalidad: co
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #10 en: Viernes 11 de Noviembre de 2005, 18:03 »
0
bueno otras cosas que encontrado son las /n pues en mi universidad me enseñaron el gotoxy(x,y)que para mi parecer es mejor podes acomodar las frases que opinan los demas
[size=85]Ingenieria de Software VII, EAM.[/size]

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #11 en: Viernes 11 de Noviembre de 2005, 18:46 »
0
gotoxy no es standard, no entiendo como enseñan cosas tan inutiles como esa funcion. Ya no estamos en la epoca de las cavernas (MS-DOS, 16 bits, etc).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

scullyERA

  • Miembro activo
  • **
  • Mensajes: 42
  • Nacionalidad: 00
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #12 en: Viernes 11 de Noviembre de 2005, 19:10 »
0
Qué no se supone que estábamos hablando de forma de escribir ("codificar") en C, y no de como mostrar datos en pantalla?? :o... pero bueno., estoy de acuerdo con mi buen ETERNAL IDOL pues gotoxy no es estandar (pero que bien ayuda en windows, jajaja :P )!!

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #13 en: Viernes 11 de Noviembre de 2005, 19:39 »
0
Cita de: "scullyERA"
Qué no se supone que estábamos hablando de forma de escribir ("codificar") en C, y no de como mostrar datos en pantalla?? :o... pero bueno., estoy de acuerdo con mi buen ETERNAL IDOL pues gotoxy no es estandar (pero que bien ayuda en windows, jajaja :P )!!
Cual windows? sera en esa ventana de DOS emulado.  :lol:
Pues la verdad que hacen perder tiempo inutilmente enseñando funciones no estandar para compiladores a 16bits.


P.D. y no se olviden del siempre util:

a=b?c:d;

P.D.2. Si quieres tener todos tus valores iniciados a 0 si trabajas en windows existe una funcion del sistema operativo, un malloc especial no recuerdo exactamente el nombre pero solo cambia una o dos letras. Reserva un bloque de memoria e inicializa a 0 todo el bloque (que es mas rapido que hacerlo de otras formas). Es muy recomendable hacer este tipo de reserva de memoria por que atenua en gran medida los desastres de un error de administracion de memoria, por que generalmente al intentar escribir usando un puntero no inicializado genera una excepcion por intentar escribir en una zona de memoria no permitida, que viene a ser el 0 con el que inicializamos. Si intentamos acceder a una estructura de datos este acceso sera a otras posiciones pero generalmente suficientemente "chicas" (20,30,150,) para ser salvados por la excepcion de intento de escritura o lectura de una zona de memoria que no podemos utilizar.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #14 en: Viernes 11 de Noviembre de 2005, 19:56 »
0
Cita de: "Amilius"
a=b?c:d;

P.D.2. Si quieres tener todos tus valores iniciados a 0 si trabajas en windows existe una funcion del sistema operativo, un malloc especial no recuerdo exactamente el nombre pero solo cambia una o dos letras. Reserva un bloque de memoria e inicializa a 0 todo el bloque (que es mas rapido que hacerlo de otras formas). Es muy recomendable hacer este tipo de reserva de memoria por que atenua en gran medida los desastres de un error de administracion de memoria, por que generalmente al intentar escribir usando un puntero no inicializado genera una excepcion por intentar escribir en una zona de memoria no permitida, que viene a ser el 0 con el que inicializamos. Si intentamos acceder a una estructura de datos este acceso sera a otras posiciones pero generalmente suficientemente "chicas" (20,30,150,) para ser salvados por la excepcion de intento de escritura o lectura de una zona de memoria que no podemos utilizar.

El operador ternario es muy bueno realmente, te permite aplicar la misma logica que un if else en una sola linea.

En cuanto a la memoria en el heap, justamente HeapAlloc es la funcion que provee Windows. Poniendo el segundo parametro a HEAP_ZERO_MEMORY conseguis el efecto indicado.
De cualquier manera no tiene mucho sentido lo que decis sobre evitar problemas de excepciones ya que un puntero no inicializado puede apuntar a cualquier lado, a lo que haya en la pila en esa posicion de la variable y no tiene nada que ver con reservar memoria.

Si sirve para cuando usamos funciones de cadenas pero yo les recomiendo la practica habitual:

Código: Text
  1.  
  2. char *str = (char*)malloc(len);
  3. memset(str, 0, len); //yo uso que es una macro en VC++ ZeroMemory(str, len);
  4. free(str);
  5.  
  6.  

Si se acostumbran a escribir los tres como si fueran atomicos dificilmente tengan memory leaks.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

judamo

  • Miembro activo
  • **
  • Mensajes: 74
  • Nacionalidad: co
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #15 en: Sábado 12 de Noviembre de 2005, 01:33 »
0
respecto al INUTIL GOTOXY que quieren decir que no entendi ni pio.....o no estan habando de c++
[size=85]Ingenieria de Software VII, EAM.[/size]

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #16 en: Sábado 12 de Noviembre de 2005, 03:58 »
0
Cita de: "Eternal Idol"
Cita de: "Amilius"
a=b?c:d;

P.D.2. Si quieres tener todos tus valores iniciados a 0 si trabajas en windows existe una funcion del sistema operativo, un malloc especial no recuerdo exactamente el nombre pero solo cambia una o dos letras. Reserva un bloque de memoria e inicializa a 0 todo el bloque (que es mas rapido que hacerlo de otras formas). Es muy recomendable hacer este tipo de reserva de memoria por que atenua en gran medida los desastres de un error de administracion de memoria, por que generalmente al intentar escribir usando un puntero no inicializado genera una excepcion por intentar escribir en una zona de memoria no permitida, que viene a ser el 0 con el que inicializamos. Si intentamos acceder a una estructura de datos este acceso sera a otras posiciones pero generalmente suficientemente "chicas" (20,30,150,) para ser salvados por la excepcion de intento de escritura o lectura de una zona de memoria que no podemos utilizar.

El operador ternario es muy bueno realmente, te permite aplicar la misma logica que un if else en una sola linea.

En cuanto a la memoria en el heap, justamente HeapAlloc es la funcion que provee Windows. Poniendo el segundo parametro a HEAP_ZERO_MEMORY conseguis el efecto indicado.
De cualquier manera no tiene mucho sentido lo que decis sobre evitar problemas de excepciones ya que un puntero no inicializado puede apuntar a cualquier lado, a lo que haya en la pila en esa posicion de la variable y no tiene nada que ver con reservar memoria.

Si sirve para cuando usamos funciones de cadenas pero yo les recomiendo la practica habitual:

Código: Text
  1.  
  2. char *str = (char*)malloc(len);
  3. memset(str, 0, len); //yo uso que es una macro en VC++ ZeroMemory(str, len);
  4. free(str);
  5.  
  6.  

Si se acostumbran a escribir los tres como si fueran atomicos dificilmente tengan memory leaks.
No entendiste, ni tampoco explique bien.  :P

Bueno la cosa es simple, los punteros estan inicializados a 0, como cualquier otra variable que este definida dentro del bloque inicializado a 0. Obviamente el puntero que estamos utilizando para reservar esa memoria no estará inicializado a 0 a menos que lo hagamos personalmente o la zona de memoria donde esta definida esa variable fue reservada a la vez inicializando el bloque en 0.

Esto lo digo por que es la forma en que trabaja Delphi. Al crear un nuevo objeto le asigna un pedazo de la memoria que ya reservo previamente mediante windows. Asi que cualquier puntero que tengas definido dentro de ese objeto estara inicializado a 0 con todas las ventajas que esto supone.

Respecto a la pila, esa es otra historia.

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Forma Elegante...
« Respuesta #17 en: Sábado 12 de Noviembre de 2005, 07:08 »
0
quieren estilo?

aprendan de los grandes:

http://www0.us.ioccc.org/2004/arachnid.c
http://www0.us.ioccc.org/2004/gavare.c

Código: Text
  1. main(O){int I,Q,l=O;if(I=l*4){l=6;if(l&#62;5)l+=Q-8?l-(Q=getchar()-2)%2:l;if(Q*=2)O+=&#34;has dirtiest IF&#34;[(I/-Q&12)-l/Q%4];}printf(&#34;%d&#092;n&#34;,8+O%4);}
  2.  

http://www0.us.ioccc.org/2004/newbern.c
http://www0.us.ioccc.org/2004/omoikane.c
sublime
http://www0.us.ioccc.org/2004/vik2.c
http://www0.us.ioccc.org/2001/cheong.c
http://www0.us.ioccc.org/2001/coupard.c


Y EL ULTIMO Y EL MEJOR DE TODOS!
http://www0.us.ioccc.org/2001/williams.c

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #18 en: Sábado 12 de Noviembre de 2005, 10:51 »
0
judamo: gotoxy es una funcion para situar el cursor en la consola, es arcaica, obsoleta y la trajo al mundo la infame Borland.
 
Amilius: ¿Delphi? Estamos mezclando lenguajes entonces ...

bob esponja: esos tipos tienen tiempo libre eh

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #19 en: Lunes 14 de Noviembre de 2005, 18:17 »
0
Cita de: "Amilius"
Cita de: "scullyERA"
Qué no se supone que estábamos hablando de forma de escribir ("codificar") en C, y no de como mostrar datos en pantalla?? :o... pero bueno., estoy de acuerdo con mi buen ETERNAL IDOL pues gotoxy no es estandar (pero que bien ayuda en windows, jajaja :P )!!
Cual windows? sera en esa ventana de DOS emulado.  :lol:
Pues la verdad que hacen perder tiempo inutilmente enseñando funciones no estandar para compiladores a 16bits.


P.D. y no se olviden del siempre util:

a=b?c:d;

P.D.2. Si quieres tener todos tus valores iniciados a 0 si trabajas en windows existe una funcion del sistema operativo, un malloc especial no recuerdo exactamente el nombre pero solo cambia una o dos letras. Reserva un bloque de memoria e inicializa a 0 todo el bloque (que es mas rapido que hacerlo de otras formas). Es muy recomendable hacer este tipo de reserva de memoria por que atenua en gran medida los desastres de un error de administracion de memoria, por que generalmente al intentar escribir usando un puntero no inicializado genera una excepcion por intentar escribir en una zona de memoria no permitida, que viene a ser el 0 con el que inicializamos. Si intentamos acceder a una estructura de datos este acceso sera a otras posiciones pero generalmente suficientemente "chicas" (20,30,150,) para ser salvados por la excepcion de intento de escritura o lectura de una zona de memoria que no podemos utilizar.


Yo no creo que sea mas rápido que hacerlo con un ciclo FOR (o cualquier otro ciclo). Apuesto a q esta función utiliza un ciclo para hacer la inicialización. Seguramente sea más rapido a la hora de escribir el programa, lo cual no significa que el codigo sea mas eficiente. Además siendo un funcion de windos SEGURO que es más lenta.

Menos código no significa más rápido.

Por otro lado, como ya dijeron, la forma en que el codigo C se convierte en maquina depende del compilador. Para estar seguro de que el codigo que construyes es eficiente, empieza por leer el manual del compilador.

saludos :hola:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #20 en: Lunes 14 de Noviembre de 2005, 19:05 »
0
Cita de: "patitofeo"
Además siendo un funcion de windos SEGURO que es más lenta.
En este caso en concreto no, incluso es mas lento usar una funcion de la biblioteca standard de C que finalmente termina llamando a HeapAlloc.

 :devil:  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Forma Elegante...
« Respuesta #21 en: Martes 15 de Noviembre de 2005, 00:04 »
0
Hablando específicamente del ejemplo que pusiste trataré de responder a tus preguntas.

Lo de que el código en C++ no es tan legible (al escribir i++ en vez de i = i + 1) es algo subjetivo y, según mi experiencia, depende de que tanto has programado en este lenguaje, ya que para mi es más legible un código que utiliza el operador de  incremento ++, el operador de decisión : ? y otros como usar los  peradores de apuntadores * e indirección &, pero creo que eso ya depende del  gusto personal de cada quien, aunque para alguien que comienza a programar en C++ estos les parezcan ilegibles al principío.

Vamos ahora con tus preguntas.

1. ¿es verdad que i++ es mejor que i = i + 1?
Bueno, en este caso, aunque el efecto es el mismo (incrementar la variable i en 1), el primer caso es mejor aunque sólo sea porque tecleas sólo tres caracteres en vez de nueve, pero, a diferencia de los compiladores de antes, en los que sólo eran significativos los primeros 8 o 10 caracteres, en los de ahora se pueden declarar nombres de variables considerablemente más grandes (de 30 caracteres o más) y se recomienda usar identificadores dentro del código que expresen mejor para lo cual se están usando, de modo que es común, al consultar códigos de ejemplos en los libros o en internet, toparse ahora con identificadores de 15, 20 o más caracteres y es más legible y ahorrativo el poner
Código: Text
  1.  
  2. ContadorSecuenciaDisparo++;
  3.  
  4.  
que
Código: Text
  1.  
  2. ContadorSecuenciaDisparo = ContadorSecuenciaDisparo + 1;
  3.  
  4.  
pero hay otras consideraciones aunque no sean tan obvias. La expresión i++ puede usarse dentro de un condicional como bien muestra el siguiente ejemplo de función que copia una cadena en otra
Código: Text
  1.  
  2. /* strcpy: copia t hacia s */
  3. void strcpy (char *s, char *t)
  4. {
  5.    while (*s++ = *t++)
  6.      &#59;
  7. }
  8.  
  9.  
Para hacer lo mismo en otro lenguaje, como por ejemplo el Pascal o el Basic, necesitamos muchas más líneas de código. Este ejemplo lo pueden consultar en la sección 5.5 Apuntadores a caracteres, y funciones del excelente y recomendable libro El Lenguaje de Programación C de los autores Brian W. Kernighan y Dennis M. Ritchie (este último creador del lenguaje C). Otro libro recomendable (desde mi punto de vista) es la tercera edición de El Lenguaje de Programación C++ del creador de este lenguaje Bjarne Stroustrup.
   El operador ++ se utiliza mucho en código que hace uso de apuntadores como bien muestra el ejemplo anterior aunque el uso de estos es, para mucha gente, discutible y me parece que lenguajes como Java y C# restringen totalmente su uso aunque no estoy seguro pues nunca he programado en esos lenguajes.

2. ¿Qué quiere decir esto?
Bueno, eso ya se dijo en la primera respuesta. Incrementa en 1 la variable i

3. ¿Ocurre con todo el código?
Esta pregunta no acabo de entenderla bien, de modo que la respuesta la dejaré en blanco

4. ¿Donde se aprende?
En los libros y con ejemplos de código de terceras personas. Yo te recomiendo los libros que te mencioné en la primera respuesta

5. ¿Resulta mas rápida la ejecución?
La mayoría de los compiladores actuales están muy avanzados en lo que a ptimización de código se refiere por lo que i++ o i = i + 1 probablemente generarán las mismas líneas de código binario de máquina.

6. ¿Para que se utilizaría?
Bueno, creo que en la primera respuesta queda contestada esta

7. ¿Sólo es un asunto de un buen diseño?
Me parece que también en la primera respuesta se responde esta.