Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Noticias
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 27-04-2013
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por cmm07 Ver Mensaje
Hola bueno si no me refiero tanto a c++ que tiendo es mas difícil y también es antiguo ( lo puse mas que nada porque están de otro de la misma rama que c# o son similares), yo hable mas que nada comparándolo con c#, ese si que es un lenguaje súper estructurado, al principio yo lo miraba en huevo jjeje pero me asombra saber como esta todo estructurado es algo que realmente sorprendente programar en c#..

El creador de pascal y de Delphi es el arquitecto jefe de C# (y del .Net), se puede decir que es el papá de los tres, gran cantidad de ventajas de Delphi se reflejaron en C# y este tiene ciertas cosas nuevasque al implementaras en Delphi sería muy complicado y para el alcance que tiene delphi en la actualidad no son "necesarias", pero C# tiene cosas que Delphi no y en unas partes su sintaxis esta un poco más optimizada que delphi, pero en general son muy parejos (en sintaxis) pero lo que se puede ahorrar en sintaxis en C# se va a perder en soporte, mantener una aplicación .Net demanda más que una aplicación en Delphi (hablando de aplicaciones de escritorio que donde Delphi y C# tienen algo en común).
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #42  
Antiguo 27-04-2013
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por rretamar Ver Mensaje
(igual sigo prefiriendo la sintaxis de Object Pascal, la encuentro mucho más amigable "programación para seres humanos" ).

Yo tambien la prefiero pero estas dos cosas de C# sería bueno tenerlas en Delphi para mi gusto.
1. el asignar propiedades.
Código:
En Delphi
type MyClass = class(tObject)
  private
      fMyProp : integer;
      function GetMyProp: integer;
      procedure SetMyProp(const Value: integer);
  public
      property MyProp : integer read GetMyProp write SetMyProp;
  end;
  
  function MyClass.GetMyProp: integer;
      begin
      result:= max(fMyProp,0);
      end;
  
  procedure MyClass.SetMyProp(const Value: integer);
      begin
      if Value >= 0 then
         fMyProp:= Value;
      end;
  



En C#


Código:
public class MyClass
{
    private int myProp = 0;
    public  int MyProp
        {
        get { return Math.Max(myProp, 0); }
        set { if (value > 0)
                  myProp = value; }
        }
}

2. try catch con finally
en C#
Código:
try
        {
            throw     New MyException("Error occurred in C#");
        }
        catch(MyException) 
        { 
            HandleMyException(); 
        }
        finally
        {
            CleanUp(); 
        }
Esto en delphi requiere de abrir dos try, el primero con el finally y el segundo con el catch
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #43  
Antiguo 27-04-2013
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Cita:
Empezado por rretamar Ver Mensaje
No me resistí a colocar un trozo de código fuente en C++ (sacado de http://www.cprogramming.com ), creo que una imagen vale más que mil palabras:

Código:
//**************************************
    //INCLUDE files for :crypt.c
    //**************************************
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    //**************************************
    // Name: CryptCode.c
    // Description:Encrypts file and outputs it to a file or stdout
    // By:Praveena M
    //
    //
    // Inputs:CryptCode.exe <infile> <outfile> <key>
    //
    //**************************************
   
    #define cypherbits 256 /* encryption strength in bits */
    #define cypher cypherbits/(sizeof(int)*8)
    int seed[cypher];
    void modseed() {
    int x;
    for(x=1;x<cypher;x++)seed[x]=seed[x]*0x81772012+seed[x]+0x49122035+seed[x+1];
    for(x=1;x<cypher;x++)seed[0]=seed[0]^seed[x];
    }
    int seedsum() {
    int n,x;
    n=0x80379251;
    for(x=0;x<cypher;x++)n=n^seed[x];
    return((n>>24)^((n>>16)&255)^((n>>8)&255)^(n&255));
    }
    char strequ(char *s1,char *s2) {
    int p;
    p=0;
    while((s1[p]==s2[p])&&(s1[p]!=0)&&(s2[p]!=0))p++;
    if(s1[p]==s2[p])return(1); else return(0);
    }
    int main(int argc,char *argv[]) {
    char 
banner[]="\x43\x6f\x64\x65\x64\x20\x62\x79\x20\x50\x72\x61\x76\x65\x65\x6e\x61"
    "\x20\x6f\x66\x20\x49\x6e\x64\x69\x61"
    
"\x20\x28\x70\x76\x6e\x63\x61\x64\x40\x6b\x72\x65\x63\x2e\x65\x72\x6e\x65\x74\x2e\x69\x6e\x29";
    char buf[2048];
    int p,r,l,i,t,s,x;
    char b,c,pct,lpct;
    FILE *infile=NULL,*outfile=NULL;
    fprintf(stderr, "%s\n", banner);
    if(argc!=4){
    fprintf(stderr,"use: %s <infile> <outfile> <key>\n",argv[0]);
    return -1;
    }
    if(strequ(argv[1],"stdin"))infile=stdin; else
    if((infile=fopen(argv[1],"r"))==NULL){
    fprintf(stderr,"failed to open %s\n",argv[1]);
    return -1;
    }
    if(strequ(argv[2],"stdout"))outfile=stdout; else
    if((outfile=fopen(argv[2],"w"))==NULL){
    fprintf(stderr,"failed to create %s\n",argv[2]);
    return -1;
    }
    if(infile!=stdin) {
    fseek(infile,0,SEEK_END);
    l=ftell(infile);
    rewind(infile);
    } else l=0;
    s=l;
    t=0;
    pct=0;
    if(l<1)fprintf(stderr,"Encrypting data.. (%d bit cypher)\n",cypher*sizeof(int)*8);
    else fprintf(stderr,"Encrypting %d bytes.. (%d bit cypher)\n",l,cypher*sizeof(int)*8);
  /*  bzero(seed,sizeof(seed)); */
    modseed();
    p=0;
    while(argv[3][p]!=0){
    modseed();
    seed[0]=seed[0]+argv[3][p];
    modseed();
    p++;
    }
    i=0;
    if(l>0){
    fputc('[',stderr);
    x=(l/sizeof(buf));
    if(l-x*sizeof(buf)!=0)x+=1;
    if(x>38)x=38;
    for(p=0;p<x;p++) fputc(32,stderr);
    fputc(']',stderr);
    fputc(13,stderr);
    fputc('[',stderr);
    fflush(stderr);
    }
    c=1;
    while(c){
    r=fread(&buf,1,sizeof(buf),infile);
    if(r>0) {
         t+=r;
         if(l>0){
        lpct=pct;
        pct=t/(l/x);
        if(pct>lpct) {
        fputc(88+32*i,stderr);  
        fflush(stderr);
        i=1-i;
        }
         } else {
        fputc(88+32*i,stderr);
        fflush(stderr);
        i=1-i;
         }
         p=0;
         while(p<r) {
        modseed();
        buf[p]=buf[p]^seedsum();
        p++;
         }
         if(fwrite(&buf,1,r,outfile)!=r) {
        fprintf(stderr,"\nerror writing data\n");
        return -1;
         }
    } else c=0;
    }
    if(l>0)fputc(']',stderr);
    fprintf(stderr,"\nDone. Wrote %d bytes.\n",t);
    }
Una pesadilla. Realmente un trabajo para dar a un programador que uno quiere despedir.

Aquí otro código más legible:

Código:
/*
XOR.cpp
Matthew Costuros
snoborder420@yahoo.com
AIM: Rpi Matty
Proper usage is XOR.exe filename Key
Encrypt the file with a key 324
XOR.exe plain.txt 324
Decrypt that file
XOR.exe plain.enc  324
Encrypt a top secret file
XOR.exe keepsafe.txt 56765
Decrypt that secret file
XOR.exe keepsafe.end 56765
*/
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int XOR(char * filename, unsigned long key);
int main(int argv, char ** argc)
{
	unsigned long key;
	char filename[100];
	//if they used command line arguments pass the filename and key to xor function
	if( argv == 3)
	{
		if( XOR(argc[1],(unsigned int)atol(argc[2]) ) )
		{
			cout << "There was an error trying to encrypt/decrypt the file " <<  argc[1] << endl;
		}
	}
	//other wise prompt for the key and filename
	else
	{
		cout << "What is the filename?" << endl;
		cin.getline(filename,99,'\n');
	
		cout << "What is the key?" << endl;
		cin >> key;
		
		//tell the user about command line then call xor function
		cout << "Next time you can use the command line, the format is " << argc[0] << " filename key" << endl;
		if( XOR(filename,key) )
		{
			cout << "There was an error trying encrypt/decrpyt the file " << filename << endl;
		}
	}
	return 0;
}
int XOR(char * filename, unsigned long key)
{
	FILE * input = NULL , *output = NULL;
	char * outfilename = NULL;
	int len = strlen(filename);
	unsigned char buffer;
	if( (filename[len-4] == '.') && (filename[len-3] == 'e') && (filename[len-2] == 'n') && (filename[len-1] == 'c') )
	{
		// our input file is encoded then we will create a file without the .end extension
		outfilename = new char[len+1]; //make room for the name+\0
		strcpy(outfilename,filename); //copy the string name
		outfilename[len-4] = '\0'; //put the \0 before the .enc extension to cut it off
	}
	else
	{
		outfilename = new char[len+5]; //make room for the name + .enc + \0
		strcpy(outfilename,filename); //copy the file name
		strncat(outfilename,".enc",4); //add the .enc extension
	}
	input =	fopen(filename,"rb");
	if( input == NULL)
	{
		cout << "Error opening file " << filename << endl;
		delete [] outfilename; //free the memory before leaving
		outfilename = NULL;
		return 1;
	}
	
	output = fopen(outfilename,"wb");
	if( output == NULL )
	{
		cout << "Error creating output file " << outfilename << endl;
		delete [] outfilename; //free the mem before leaving
		outfilename = NULL;
		return 1;
	}
	while( ! feof(input) )
	{
		//get some data
		if( fread(&buffer,sizeof(unsigned char),1,input) != 1 )
		{
			//if we didnt get any data, but we are not at the eof, then an error has occured
			if( ! feof(input) )
			{
				delete [] outfilename;
				outfilename = NULL;
				fclose(input);
				fclose(output);
				
				return 1;
			}
		}
		else
		{
			//xor that data
			buffer ^= key; 
		
			//write some data
			fwrite(&buffer,sizeof(unsigned char),1,output);
		}
	}
	//close the files and free that memory
	fclose(input);
	fclose(output);
	delete [] outfilename;
	return 0;
}
Mucho mejor.

(igual sigo prefiriendo la sintaxis de Object Pascal, la encuentro mucho más amigable "programación para seres humanos" ).
Dos cosas , primero eso código horrible es porque primero no eta ordenado y segundo porque colocas una fuente de un cripter, eso es pura matemática compleja en el lenguaje que sea se va a ver complicado, un encriptador de por si es complejo, para mi ahí no demuestra lo bonito de c++, en todo caso quizá fue un error mencionar c++, yo hablo mas directamente con c#. :P
Responder Con Cita
  #44  
Antiguo 27-04-2013
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Cita:
Empezado por RONPABLO Ver Mensaje
Yo tambien la prefiero pero estas dos cosas de C# sería bueno tenerlas en Delphi para mi gusto.
1. el asignar propiedades.
Código:
En Delphi
type MyClass = class(tObject)
  private
      fMyProp : integer;
      function GetMyProp: integer;
      procedure SetMyProp(const Value: integer);
  public
      property MyProp : integer read GetMyProp write SetMyProp;
  end;
  
  function MyClass.GetMyProp: integer;
      begin
      result:= max(fMyProp,0);
      end;
  
  procedure MyClass.SetMyProp(const Value: integer);
      begin
      if Value >= 0 then
         fMyProp:= Value;
      end;
  



En C#


Código:
public class MyClass
{
    private int myProp = 0;
    public  int MyProp
        {
        get { return Math.Max(myProp, 0); }
        set { if (value > 0)
                  myProp = value; }
        }
}

2. try catch con finally
en C#
Código:
try
        {
            throw     New MyException("Error occurred in C#");
        }
        catch(MyException) 
        { 
            HandleMyException(); 
        }
        finally
        {
            CleanUp(); 
        }
Esto en delphi requiere de abrir dos try, el primero con el finally y el segundo con el catch
Exacto, a eso me refiero, son pequeños detalles pero que marcan una diferencia, entonces pienso que embarcaderos debería hacer un poco mas características al lenguaje en si (delpi o pascal) que hacer que firemoney, interbase (que ya se fue creo) que mil componentes (que facilitan las cosas pero te malacostumbra al pasarte a otra tecnología ya que delphi cuenta con las mas extensas paletas de componentes... Y agregan mil cosas y tecnologías que llegan a marear jeje..
Responder Con Cita
  #45  
Antiguo 27-04-2013
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Cita:
Empezado por rretamar Ver Mensaje
No me resistí a colocar un trozo de código fuente en C++ (sacado de http://www.cprogramming.com ), creo que una imagen vale más que mil palabras:

Código:
//**************************************
    //INCLUDE files for :crypt.c
    //**************************************
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    //**************************************
    // Name: CryptCode.c
    // Description:Encrypts file and outputs it to a file or stdout
    // By:Praveena M
    //
    //
    // Inputs:CryptCode.exe <infile> <outfile> <key>
    //
    //**************************************
   
    #define cypherbits 256 /* encryption strength in bits */
    #define cypher cypherbits/(sizeof(int)*8)
    int seed[cypher];
    void modseed() {
    int x;
    for(x=1;x<cypher;x++)seed[x]=seed[x]*0x81772012+seed[x]+0x49122035+seed[x+1];
    for(x=1;x<cypher;x++)seed[0]=seed[0]^seed[x];
    }
    int seedsum() {
    int n,x;
    n=0x80379251;
    for(x=0;x<cypher;x++)n=n^seed[x];
    return((n>>24)^((n>>16)&255)^((n>>8)&255)^(n&255));
    }
    char strequ(char *s1,char *s2) {
    int p;
    p=0;
    while((s1[p]==s2[p])&&(s1[p]!=0)&&(s2[p]!=0))p++;
    if(s1[p]==s2[p])return(1); else return(0);
    }
    int main(int argc,char *argv[]) {
    char 
banner[]="\x43\x6f\x64\x65\x64\x20\x62\x79\x20\x50\x72\x61\x76\x65\x65\x6e\x61"
    "\x20\x6f\x66\x20\x49\x6e\x64\x69\x61"
    
"\x20\x28\x70\x76\x6e\x63\x61\x64\x40\x6b\x72\x65\x63\x2e\x65\x72\x6e\x65\x74\x2e\x69\x6e\x29";
    char buf[2048];
    int p,r,l,i,t,s,x;
    char b,c,pct,lpct;
    FILE *infile=NULL,*outfile=NULL;
    fprintf(stderr, "%s\n", banner);
    if(argc!=4){
    fprintf(stderr,"use: %s <infile> <outfile> <key>\n",argv[0]);
    return -1;
    }
    if(strequ(argv[1],"stdin"))infile=stdin; else
    if((infile=fopen(argv[1],"r"))==NULL){
    fprintf(stderr,"failed to open %s\n",argv[1]);
    return -1;
    }
    if(strequ(argv[2],"stdout"))outfile=stdout; else
    if((outfile=fopen(argv[2],"w"))==NULL){
    fprintf(stderr,"failed to create %s\n",argv[2]);
    return -1;
    }
    if(infile!=stdin) {
    fseek(infile,0,SEEK_END);
    l=ftell(infile);
    rewind(infile);
    } else l=0;
    s=l;
    t=0;
    pct=0;
    if(l<1)fprintf(stderr,"Encrypting data.. (%d bit cypher)\n",cypher*sizeof(int)*8);
    else fprintf(stderr,"Encrypting %d bytes.. (%d bit cypher)\n",l,cypher*sizeof(int)*8);
  /*  bzero(seed,sizeof(seed)); */
    modseed();
    p=0;
    while(argv[3][p]!=0){
    modseed();
    seed[0]=seed[0]+argv[3][p];
    modseed();
    p++;
    }
    i=0;
    if(l>0){
    fputc('[',stderr);
    x=(l/sizeof(buf));
    if(l-x*sizeof(buf)!=0)x+=1;
    if(x>38)x=38;
    for(p=0;p<x;p++) fputc(32,stderr);
    fputc(']',stderr);
    fputc(13,stderr);
    fputc('[',stderr);
    fflush(stderr);
    }
    c=1;
    while(c){
    r=fread(&buf,1,sizeof(buf),infile);
    if(r>0) {
         t+=r;
         if(l>0){
        lpct=pct;
        pct=t/(l/x);
        if(pct>lpct) {
        fputc(88+32*i,stderr);  
        fflush(stderr);
        i=1-i;
        }
         } else {
        fputc(88+32*i,stderr);
        fflush(stderr);
        i=1-i;
         }
         p=0;
         while(p<r) {
        modseed();
        buf[p]=buf[p]^seedsum();
        p++;
         }
         if(fwrite(&buf,1,r,outfile)!=r) {
        fprintf(stderr,"\nerror writing data\n");
        return -1;
         }
    } else c=0;
    }
    if(l>0)fputc(']',stderr);
    fprintf(stderr,"\nDone. Wrote %d bytes.\n",t);
    }
Una pesadilla. Realmente un trabajo para dar a un programador que uno quiere despedir.

Aquí otro código más legible:

Código:
/*
XOR.cpp
Matthew Costuros
snoborder420@yahoo.com
AIM: Rpi Matty
Proper usage is XOR.exe filename Key
Encrypt the file with a key 324
XOR.exe plain.txt 324
Decrypt that file
XOR.exe plain.enc  324
Encrypt a top secret file
XOR.exe keepsafe.txt 56765
Decrypt that secret file
XOR.exe keepsafe.end 56765
*/
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int XOR(char * filename, unsigned long key);
int main(int argv, char ** argc)
{
    unsigned long key;
    char filename[100];
    //if they used command line arguments pass the filename and key to xor function
    if( argv == 3)
    {
        if( XOR(argc[1],(unsigned int)atol(argc[2]) ) )
        {
            cout << "There was an error trying to encrypt/decrypt the file " <<  argc[1] << endl;
        }
    }
    //other wise prompt for the key and filename
    else
    {
        cout << "What is the filename?" << endl;
        cin.getline(filename,99,'\n');
    
        cout << "What is the key?" << endl;
        cin >> key;
        
        //tell the user about command line then call xor function
        cout << "Next time you can use the command line, the format is " << argc[0] << " filename key" << endl;
        if( XOR(filename,key) )
        {
            cout << "There was an error trying encrypt/decrpyt the file " << filename << endl;
        }
    }
    return 0;
}
int XOR(char * filename, unsigned long key)
{
    FILE * input = NULL , *output = NULL;
    char * outfilename = NULL;
    int len = strlen(filename);
    unsigned char buffer;
    if( (filename[len-4] == '.') && (filename[len-3] == 'e') && (filename[len-2] == 'n') && (filename[len-1] == 'c') )
    {
        // our input file is encoded then we will create a file without the .end extension
        outfilename = new char[len+1]; //make room for the name+\0
        strcpy(outfilename,filename); //copy the string name
        outfilename[len-4] = '\0'; //put the \0 before the .enc extension to cut it off
    }
    else
    {
        outfilename = new char[len+5]; //make room for the name + .enc + \0
        strcpy(outfilename,filename); //copy the file name
        strncat(outfilename,".enc",4); //add the .enc extension
    }
    input =    fopen(filename,"rb");
    if( input == NULL)
    {
        cout << "Error opening file " << filename << endl;
        delete [] outfilename; //free the memory before leaving
        outfilename = NULL;
        return 1;
    }
    
    output = fopen(outfilename,"wb");
    if( output == NULL )
    {
        cout << "Error creating output file " << outfilename << endl;
        delete [] outfilename; //free the mem before leaving
        outfilename = NULL;
        return 1;
    }
    while( ! feof(input) )
    {
        //get some data
        if( fread(&buffer,sizeof(unsigned char),1,input) != 1 )
        {
            //if we didnt get any data, but we are not at the eof, then an error has occured
            if( ! feof(input) )
            {
                delete [] outfilename;
                outfilename = NULL;
                fclose(input);
                fclose(output);
                
                return 1;
            }
        }
        else
        {
            //xor that data
            buffer ^= key; 
        
            //write some data
            fwrite(&buffer,sizeof(unsigned char),1,output);
        }
    }
    //close the files and free that memory
    fclose(input);
    fclose(output);
    delete [] outfilename;
    return 0;
}
Mucho mejor.

(igual sigo prefiriendo la sintaxis de Object Pascal, la encuentro mucho más amigable "programación para seres humanos" ).
Lo ultimo, es como si yo colocara este código de delphi de un cripter y desordenado:
Código Delphi [-]
    
 FI := Y1[i]-State.X[0]*exp((-1)*((AP_Sqr(X1[i]-State.X[1])/(2*AP_Sqr(6.3)))))-State.X[2]*exp((-1)*((AP_Sqr(X1[i]-State.X[3])/(2*AP_Sqr(6.3)))));


                // dFi/dA = -exp^(-((x-Xk)^2)/2s^2)
                //
                State.J[I,0] := (-1)*exp((-1)*((AP_Sqr(X1[i]-State.X[1])/(2*AP_Sqr(6.3)))));
                //
                // dFi/dXk = (A*(xK-x)*exp(-(((x-Xk)^2)/(2*s^2))))))/(6.3^2))
               State.J[I,1] := (State.X[0]*(State.X[1]-X1[i])*exp((-1)*((AP_Sqr(X1[i]-State.X[1])/(2*AP_Sqr(6.3))))))/(AP_Sqr(6.3));

                //
                // dFi/dB = -exp^(-((x-XL)^2)/2s^2) 
                //
                State.J[I,2] := (-1)*exp((-1)*((AP_Sqr(X1[i]-State.X[3])/(2*AP_Sqr(6.3)))));

                //
                // dFi/dXLa = (B*(xL-x)*exp(-(((x-xL)^2)/(2*s^2))))))/(6.3^2))
                //
                State.J[I,3] := (State.X[2]*(State.X[3]-X1[i])*exp((-1)*((AP_Sqr(X1[i]-State.X[3])/(2*AP_Sqr(6.3))))))/(AP_Sqr(6.3));
    //
    Memo1.Lines.Add(Format('A = %4.2f'#13#10'',[
        S[0]]));
    Memo1.Lines.Add(Format('Xk = %4.2f'#13#10'',[
        S[1]]));
    Memo1.Lines.Add(Format('B = %4.2f'#13#10'',[
        S[2]]));
    Memo1.Lines.Add(Format('XLa = %4.2f'#13#10'',[
        S[3]]));
    Memo1.Lines.Add(Format('Tipo de terminación = %0d (debería ser 2 - parando cuando sea suficientemente pequeño)'#13#10'',[
        Rep.TerminationType]));

Se ve igual de feo y desordenado que el codigo de c++ que enviste :S, en fin, yo no estoy para hacer criticas a delphi, solo que no puede ser que cobren tanto por algo que tampoco es la "gran maravilla de aquiles", me gustaria ver un delphi con los precios mucho mas bajos y con más caracteristicas en el lenguaje en SI, no crear más herramientas como firemonkey, o firdeci... etc....

No estoy criticando a delphi...

Última edición por cmm07 fecha: 27-04-2013 a las 20:04:39.
Responder Con Cita
  #46  
Antiguo 27-04-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
cmm07,

Tratando de entender tus comentarios asumo que por modernización del lenguaje y su sintaxis te refieres a algo parecido a lo que ocurrió con VB6 y VB.Net, ¿Es correcto?.

Aprovechando tu experiencia en Delphi y C# sería ideal ver un ejemplo que muestre lo que indicas sobre la estructuración de C# vs Delphi

Nelson.
Responder Con Cita
  #47  
Antiguo 27-04-2013
Avatar de Julián
Julián Julián is offline
Merodeador
 
Registrado: may 2003
Ubicación: en mi casa
Posts: 2.019
Poder: 10
Julián Va por buen camino
Se puede escribir buén código y mal código en cualquier lenguaje. Incluso con java, jeje.

Con delphi usas begin y end y <> y con c y similares usas { y } y !=, y con otros lenguajes otras palabras y otros simbolos. ¿Dónde esta el problema?
__________________
"la única iglesia que ilumina es la que arde"
Anonimo
Responder Con Cita
  #48  
Antiguo 27-04-2013
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Cita:
Empezado por Julián Ver Mensaje
Se puede escribir buén código y mal código en cualquier lenguaje. Incluso con java, jeje.

Con delphi usas begin y end y <> y con c y similares usas { y } y !=, y con otros lenguajes otras palabras y otros simbolos. ¿Dónde esta el problema?
El problema es que a simple vista es más interpretable begin o end que { y } respectivamente. Pero tienes razón en que todo depende como escribas el código.

Por ejemplo en propio lenguaje Delphi, detesto cuando cambian el nombre de un componente como pepito.caption:= 'Hola'; en vez de Label1.caption:='Hola'; . Con el primero uno tiene que estar buscando las declaraciones para saber a que se refiere y peor si te colocan solo parte de código y otros tantos etc.
Responder Con Cita
  #49  
Antiguo 27-04-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para eso sirve usar alguna notación para nombrarlos. Yo lo uso desde siempre y me es natural escribirlo: lbTitulo, edPrecio, iCantidad, cNombre, etc.
Responder Con Cita
  #50  
Antiguo 28-04-2013
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
i de integer, c de character, pero ¿ed y lb?... espera dejame buscar...

Tal ves en variables, pero para los nombres de objetos que vengan en Delphi, los dejo tal cual. Así cualquier otro delphiano sabra de inmediato a que componente corresponde.
Responder Con Cita
  #51  
Antiguo 28-04-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
ed edittext, lb label, etc.
Imagina que tienes un montón de edits: edittext1, edittext2, edittext3...edittext40
Asigna al edittext que muestra un saludo el valor "hola", difícil.
Sin embargo, si se llama edSaludo será más fácil
Responder Con Cita
  #52  
Antiguo 28-04-2013
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
O si claro, como no lo pude adivinar.

No olviden comentar sus códigos siempre.
Responder Con Cita
  #53  
Antiguo 28-04-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por MAXIUM Ver Mensaje
O si claro, como no lo pude adivinar.
No olviden comentar sus códigos siempre.
Claro, hombre, y pones comentarios en cada línea del programa para saber lo que es cada cosa
O cada vez que te encuentres una declaración, variable, loquesea... te vas al principio del programa a hacer una búsqueda para saber qué es y qué hace.

Es importantísimo usar una notación al escribir código, ya sea la húngara, camelcase o alguna variante.
Cualquier código "medio decente" y profesional usa siempre alguna notación.
En todas las empresas de software es obligatorio usar la notación que ellos usen.

En fin, que cada uno haga lo que le parezca, sólo lo comentaba, yo ni gano ni pierdo nada
Responder Con Cita
  #54  
Antiguo 28-04-2013
Avatar de Julián
Julián Julián is offline
Merodeador
 
Registrado: may 2003
Ubicación: en mi casa
Posts: 2.019
Poder: 10
Julián Va por buen camino
Cita:
Empezado por MAXIUM Ver Mensaje
El problema es que a simple vista es más interpretable begin o end que { y } respectivamente.
Pues no.

A lo mejor, quizá, podría ser mas interpretable begin y end que { y } para quien no tenga ni puñetera idea, pero no para un programador.

Solo son etiquetas, simbolos, que claramente delimitan un bloque de algo. Es tan tan intuitivo que no puedo entender como puede una cosa ser mas interpretable que otra.

Y lo de dejar los nombres de las variables tal cual los asigna el IDE, en lugar de usar una notación, como bien dice Casimiro, que es lo mas lógico y recomendable, me parece especialmente grave. Porque yo veo una variable llamada lbNombre en un archivo .pas, y no necesito ningún comentario para saber, con casi total seguridad, que se refiere a un componente Tlabel que estará junto a otro que muy probablemente se llamará editNombre, o edNombre, o algo parecido.
__________________
"la única iglesia que ilumina es la que arde"
Anonimo
Responder Con Cita
  #55  
Antiguo 28-04-2013
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Cita:
Empezado por Julián Ver Mensaje
Pues no.

A lo mejor, quizá, podría ser mas interpretable begin y end que { y } para quien no tenga ni puñetera idea, pero no para un programador.

Solo son etiquetas, simbolos, que claramente delimitan un bloque de algo. Es tan tan intuitivo que no puedo entender como puede una cosa ser mas interpretable que otra.

Y lo de dejar los nombres de las variables tal cual los asigna el IDE, en lugar de usar una notación, como bien dice Casimiro, que es lo mas lógico y recomendable, me parece especialmente grave. Porque yo veo una variable llamada lbNombre en un archivo .pas, y no necesito ningún comentario para saber, con casi total seguridad, que se refiere a un componente Tlabel que estará junto a otro que muy probablemente se llamará editNombre, o edNombre, o algo parecido.
Totalmente de acuerdo
Responder Con Cita
  #56  
Antiguo 28-04-2013
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya que está calentito el tema de la sintaxis... vamos a echar un jarro de agua fría:
¿Por qué no quitar los begin y end y las{ } de un plumazo?

Así lo hace python basándose en la sangría del código, más simple y legible, creo imposible.
(Los tabuladores se pueden configurar a 2 caracteres, yo lo tenía por defecto a 8. Esto es de un programa que hice en 3D, "def" es un "procedure" de delphi, los comentarios que se pongan a continuación entre comillas dobles o triples, sirven de ayuda al pulsar ctrl + espacio, igual que en delphi. "self" tiene el mismo significado que en delphi. Las variables no se necesitan declarar, lenguaje interpretado).
Código:
	def attachTo(self, node):
		''' reattach axis and rotation arrows to the node'''
		self.scale = 0, 0, 0
		if node:
			pos = node._getDerivedPosition() 
			ori = node._getDerivedOrientation()
			if 'translation' in self.entryShow and 'translation' in self._allowedToShow:
				self.translateNode.setPosition(pos)
				self.translateNode.setScale(self.normalScale)
			if 'rotation' in self.entryShow and 'rotation' in self._allowedToShow:
				self.rotateNode.setPosition(pos + self._rotateNodeOffset)
				self.rotateNode.setOrientation(ori)
				self.rotateNode.setScale(self.normalScale)

	def selectTerrain(self, positionTuple):
		if 'terrain' in self._allowedToShow:
			self.attachTo(None)
			if positionTuple[0] is not None and positionTuple[1] is not None and positionTuple[2] is not None:
				self.terrainNode.setPosition(positionTuple[0], positionTuple[1] + 0.5, positionTuple[2])
				self.terrainNode.setScale(0.2, 0.2, 0.2)
	
		if 'pointer3d' in self._allowedToShow:
			self.pointer3d.setPosition(positionTuple)
			s = 0.05
			self.pointer3d.setScale(s, s, s)
En cuanto a lo de crear variables, hace 3 años que no voy a la parte de declaración de un procedimiento, en cualquier parte del código escribo: "Lista:TStringList" pulso una combinación de teclas en Delphi7 y me crea la declaración de la variable y escribe el constructor automáticamente. Esto debería estar en el IDE sí o sí.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #57  
Antiguo 28-04-2013
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Ya que está calentito el tema de la sintaxis... vamos a echar un jarro de agua fría:
¿Por qué no quitar los begin y end y las{ } de un plumazo?

Así lo hace python basándose en la sangría del código, más simple y legible, creo imposible.
(Los tabuladores se pueden configurar a 2 caracteres, yo lo tenía por defecto a 8. Esto es de un programa que hice en 3D, "def" es un "procedure" de delphi, los comentarios que se pongan a continuación entre comillas dobles o triples, sirven de ayuda al pulsar ctrl + espacio, igual que en delphi. "self" tiene el mismo significado que en delphi. Las variables no se necesitan declarar, lenguaje interpretado).
Código:
	def attachTo(self, node):
		''' reattach axis and rotation arrows to the node'''
		self.scale = 0, 0, 0
		if node:
			pos = node._getDerivedPosition() 
			ori = node._getDerivedOrientation()
			if 'translation' in self.entryShow and 'translation' in self._allowedToShow:
				self.translateNode.setPosition(pos)
				self.translateNode.setScale(self.normalScale)
			if 'rotation' in self.entryShow and 'rotation' in self._allowedToShow:
				self.rotateNode.setPosition(pos + self._rotateNodeOffset)
				self.rotateNode.setOrientation(ori)
				self.rotateNode.setScale(self.normalScale)

	def selectTerrain(self, positionTuple):
		if 'terrain' in self._allowedToShow:
			self.attachTo(None)
			if positionTuple[0] is not None and positionTuple[1] is not None and positionTuple[2] is not None:
				self.terrainNode.setPosition(positionTuple[0], positionTuple[1] + 0.5, positionTuple[2])
				self.terrainNode.setScale(0.2, 0.2, 0.2)
	
		if 'pointer3d' in self._allowedToShow:
			self.pointer3d.setPosition(positionTuple)
			s = 0.05
			self.pointer3d.setScale(s, s, s)
En cuanto a lo de crear variables, hace 3 años que no voy a la parte de declaración de un procedimiento, en cualquier parte del código escribo: "Lista:TStringList" pulso una combinación de teclas en Delphi7 y me crea la declaración de la variable y escribe el constructor automáticamente. Esto debería estar en el IDE sí o sí.
Estoy de acuerdo excepto en quitar el begin, end, si sucediera el codigo seria mucho menos organizado y seria mas enredoso, estoy de acuerdo que todo proc o func debe tener un inicio y un fin bien marcado, igual que para los if.....a mi me encanta delphi, trabaje mucho con el, le tengo mucho respeto, es por eso que me gustaria ver cambios más profundos en el lenguaje en si (no cambiar lo general, ya que ahi vendría siendo otro lenguaje), nose si me entienden lo que quiero decir o me apoyan en que deberian extender más el lenguaje para que sea mucho más dinamico? y obviamente bajar un poquitín los precios, que lo encuentro muy alto.


Se que dije que el código era horrible y me disculpo porque fui muy impulsivo al decir eso. Ya que verdaderamente no pienso tan así

Saludos!!
Responder Con Cita
  #58  
Antiguo 29-04-2013
jorge82 jorge82 is offline
Baneado
 
Registrado: jun 2005
Ubicación: Mérida, Yucatán, México
Posts: 75
Poder: 19
jorge82 Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Ya que está calentito el tema de la sintaxis... vamos a echar un jarro de agua fría:
¿Por qué no quitar los begin y end y las{ } de un plumazo?

Así lo hace python basándose en la sangría del código, más simple y legible, creo imposible.
(Los tabuladores se pueden configurar a 2 caracteres, yo lo tenía por defecto a 8. Esto es de un programa que hice en 3D, "def" es un "procedure" de delphi, los comentarios que se pongan a continuación entre comillas dobles o triples, sirven de ayuda al pulsar ctrl + espacio, igual que en delphi. "self" tiene el mismo significado que en delphi. Las variables no se necesitan declarar, lenguaje interpretado).
Código:
	def attachTo(self, node):
		''' reattach axis and rotation arrows to the node'''
		self.scale = 0, 0, 0
		if node:
			pos = node._getDerivedPosition() 
			ori = node._getDerivedOrientation()
			if 'translation' in self.entryShow and 'translation' in self._allowedToShow:
				self.translateNode.setPosition(pos)
				self.translateNode.setScale(self.normalScale)
			if 'rotation' in self.entryShow and 'rotation' in self._allowedToShow:
				self.rotateNode.setPosition(pos + self._rotateNodeOffset)
				self.rotateNode.setOrientation(ori)
				self.rotateNode.setScale(self.normalScale)

	def selectTerrain(self, positionTuple):
		if 'terrain' in self._allowedToShow:
			self.attachTo(None)
			if positionTuple[0] is not None and positionTuple[1] is not None and positionTuple[2] is not None:
				self.terrainNode.setPosition(positionTuple[0], positionTuple[1] + 0.5, positionTuple[2])
				self.terrainNode.setScale(0.2, 0.2, 0.2)
	
		if 'pointer3d' in self._allowedToShow:
			self.pointer3d.setPosition(positionTuple)
			s = 0.05
			self.pointer3d.setScale(s, s, s)
En cuanto a lo de crear variables, hace 3 años que no voy a la parte de declaración de un procedimiento, en cualquier parte del código escribo: "Lista:TStringList" pulso una combinación de teclas en Delphi7 y me crea la declaración de la variable y escribe el constructor automáticamente. Esto debería estar en el IDE sí o sí.

Oye Lepe, ¿utilizas algún experto para hacer lo de la declaración de las variables?, o como le haces, ¿el IDE de Delphi7 ya tiene algo así?
__________________
Un saludito.
Responder Con Cita
  #59  
Antiguo 29-04-2013
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por Julián Ver Mensaje
Se puede escribir buén código y mal código en cualquier lenguaje. Incluso con java, jeje.
{....}
¿Dónde esta el problema?
Completamente de acuerdo...!!



Cita:
Empezado por RONPABLO Ver Mensaje
Yo tambien la prefiero pero estas dos cosas de C# sería bueno tenerlas en Delphi para mi gusto.
1. el asignar propiedades.
Código:
En Delphi
type MyClass = class(tObject)
  private
      fMyProp : integer;
      function GetMyProp: integer;
      procedure SetMyProp(const Value: integer);
  public
      property MyProp : integer read GetMyProp write SetMyProp;
  end;
  
  function MyClass.GetMyProp: integer;
      begin
      result:= max(fMyProp,0);
      end;
  
  procedure MyClass.SetMyProp(const Value: integer);
      begin
      if Value >= 0 then
         fMyProp:= Value;
      end;
  
En C#


Código:
public class MyClass
{
    private int myProp = 0;
    public  int MyProp
        {
        get { return Math.Max(myProp, 0); }
        set { if (value > 0)
                  myProp = value; }
        }
}
Es un ejemplo relativo, Delphi utiliza el concepto de separación de Definición e Implementación. Lo cual puede hacer mas legible el código para implementaciones grandes (imaginemos que el get o el set tuvieran 10 o 20 líneas por procedimeitno, y que la clase tuviera unas 20 propiedades....

Yo personalmente prefiero luchar con Begin y end que con signos: {}. Que en mi caso, siento que tengo que hacer mas esfuerzo visual para no confundirlos con paréntesis, o para que no se me pierdan en el código....

Pero es cuestion de GUSTOS y ADAPTACION como he venido diciendo, cada uno de nosotros tiene un lenguaje preferido con el cual se mueve como pez en el agua, asi que creo que no hay que ahondar en esta discusión sin fin.

Estamos como en una discusión de cristianos con mormones, tratando de definri cual reliigión es la verdadera


Creo que no debería haber mayor debate sobre temas de sintaxis, (hoy día, cada editor nos ayuda con colores e identación a organizarnos...) hay temas mas de fondo que pueden debatirse a la hora de comparar dos lenguajes....
Responder Con Cita
  #60  
Antiguo 29-04-2013
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por gatosoft Ver Mensaje
Completamente de acuerdo...!!





Es un ejemplo relativo, Delphi utiliza el concepto de separación de Definición e Implementación. Lo cual puede hacer mas legible el código para implementaciones grandes (imaginemos que el get o el set tuvieran 10 o 20 líneas por procedimeitno, y que la clase tuviera unas 20 propiedades....

Yo personalmente prefiero luchar con Begin y end que con signos: {}. Que en mi caso, siento que tengo que hacer mas esfuerzo visual para no confundirlos con paréntesis, o para que no se me pierdan en el código....

Pero es cuestion de GUSTOS y ADAPTACION como he venido diciendo, cada uno de nosotros tiene un lenguaje preferido con el cual se mueve como pez en el agua, asi que creo que no hay que ahondar en esta discusión sin fin.

Estamos como en una discusión de cristianos con mormones, tratando de definri cual reliigión es la verdadera


Creo que no debería haber mayor debate sobre temas de sintaxis, (hoy día, cada editor nos ayuda con colores e identación a organizarnos...) hay temas mas de fondo que pueden debatirse a la hora de comparar dos lenguajes....
Pues si el codigo tiene más de x linea no hay ningún problema en aceptar una función, pero muchas veces yo me encuentro con que para el read o el write necesito una sola linea (es más, diría que la mayoría de las veces es así en mis aplicaciones) y tengo que declarar dos funciones para algo que en C# arreglaron a mi parecer de forma agradable...

Respecto a los Begin y los end creo que una gran mayoría que usamos Delphi nos gustan y cuando se habla en cambios de sintaxis no nos referimos a quitar los begin y en o los "while --- do" o los "if --- then", se habla de ir mejorando cosas del lenguaje sin perder esa compatibilidad, agregar esas cosas como el "try" con el "finally" y con el "catch" integrado no sería complicado y les aseguro que en menos de lo que piensan lo estarían usando y apreciando o el asignar los valores de un atributo con un simple "Read := 25" eso sí, continuando poder asignar el "read" desde una función si es necesario.

En fin, yo los invitaría que no miren más sobre los begin y end que tanto cmm07 como yo que somos los que expresamos que sería bueno mejorar o extender la sintaxis no nos referimos a cambiar estos y muchos otros detalles que hacen de Delphi algo delicioso, si no ver esas cosas en otros lenguajes que no se tienen o que se debe de hacer pasos de más en Delphi para hacerse y que definitivamente son específicos de la sintaxis.
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tema para la próxima reunión de delphi en México. poliburro Debates 11 25-09-2008 16:39:07
Sacar fecha mas proxima VRO MySQL 1 26-06-2008 10:09:40
fecha mas proxima VRO Varios 1 04-10-2007 13:31:20
Avanzar a la próxima línea de error Crandel Varios 5 27-11-2006 17:35:49
La proxima versión de Delphi será compatible con la VCL y el .NET SMTZ Noticias 0 30-05-2004 09:34:16


La franja horaria es GMT +2. Ahora son las 20:08:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi