Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Noticias (https://www.clubdelphi.com/foros/forumdisplay.php?f=34)
-   -   delphi xe4 la proxima semana (https://www.clubdelphi.com/foros/showthread.php?t=82819)

RONPABLO 27-04-2013 18:14:49

Cita:

Empezado por cmm07 (Mensaje 459423)
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).

RONPABLO 27-04-2013 18:33:22

Cita:

Empezado por rretamar (Mensaje 459428)
(igual sigo prefiriendo la sintaxis de Object Pascal, la encuentro mucho más amigable "programación para seres humanos" :D ).


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

cmm07 27-04-2013 19:42:07

Cita:

Empezado por rretamar (Mensaje 459428)
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" :D ).

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

cmm07 27-04-2013 19:47:15

Cita:

Empezado por RONPABLO (Mensaje 459431)
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..

cmm07 27-04-2013 20:01:18

Cita:

Empezado por rretamar (Mensaje 459428)
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" :D ).

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... :)

nlsgarcia 27-04-2013 21:41:13

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.

Julián 27-04-2013 23:31:28

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?

MAXIUM 27-04-2013 23:53:42

Cita:

Empezado por Julián (Mensaje 459460)
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.

Casimiro Notevi 27-04-2013 23:59:58

Para eso sirve usar alguna notación para nombrarlos. Yo lo uso desde siempre y me es natural escribirlo: lbTitulo, edPrecio, iCantidad, cNombre, etc.

MAXIUM 28-04-2013 01:50:48

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.

Casimiro Notevi 28-04-2013 02:22:17

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 :D

MAXIUM 28-04-2013 02:34:13

O si claro, como no lo pude adivinar.

No olviden comentar sus códigos siempre.

Casimiro Notevi 28-04-2013 02:55:30

Cita:

Empezado por MAXIUM (Mensaje 459470)
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 :confused:
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 :)

Julián 28-04-2013 03:35:10

Cita:

Empezado por MAXIUM (Mensaje 459461)
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.

cmm07 28-04-2013 04:36:16

Cita:

Empezado por Julián (Mensaje 459473)
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 ;)

Lepe 28-04-2013 13:22:40

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

cmm07 28-04-2013 16:06:37

Cita:

Empezado por Lepe (Mensaje 459485)
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? :D 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!!

jorge82 29-04-2013 17:53:28

Cita:

Empezado por Lepe (Mensaje 459485)
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í?

gatosoft 29-04-2013 19:35:45

Cita:

Empezado por Julián (Mensaje 459460)
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 (Mensaje 459431)
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....

RONPABLO 29-04-2013 23:27:39

Cita:

Empezado por gatosoft (Mensaje 459544)
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.

donald shimoda 30-04-2013 05:32:06

Cita:

Empezado por Al González (Mensaje 459151)
Hola Donald.

Verás, algunos se preocupan (o se interesan) por lo que concierne a sus necesidades inmediatas como usuarios de Delphi, lo cual es normal en cualquier producto comercial, sea de software o de otra cosa. Por lo que dices ese parece ser tu caso, una posición respetable aunque la menos plausible.

Que frase mas rebuscada... No te entiendo. cual parece ser mi caso y porque es el menos "plausible" :eek:

Cita:

Empezado por Al González (Mensaje 459151)

Pero detrás de Delphi existe una comunidad de usuarios, que se preocupa y se ocupa en rescatar a esta herramienta de programación del oscurantismo al que ha estado sometida en años recientes. Muchos miembros de esta comunidad consideramos que presentar como "versión mayor" lo que realmente y a todas luces es una actualización forma parte de los errores de mercadeo que contribuyen al problema.

Bueno gracias por dejarme fuera de "la comunidad", pero si siguiera los hilos de embarcadero, las entradas de mi blog (una de las cuales armo un lindo tole tole al quejarme por un tema con firedac que no voy a explicar ahora), y las quejas que he puesto en varias oportunidades verías cuan equivocado estas! :rolleyes:

Editado: Por cierto , no pego los links acá porque la vez pasada alguno se ofendió pensando que era publicidad del blog... en fin, para el que lo quiera ver son las últimas 3 o 4 entradas del que esta en inglés.

Saludos.

donald shimoda 30-04-2013 05:35:22

Cita:

Empezado por gatosoft (Mensaje 459163)
Tenía entendio que era de unos 500 USD (499.999 USD) para la versión Enterprise....! ;)

Para ser un upgrade semi-terminado me parece costoso... Se supone que el soporte Android, se espera para otra versión, que por su interés puede ser igual de cara, es decir:

Tenes toda la razón, cuando salió la info de precios no me quedo claro, es de locos. Si sos usuario RAD (yo lo soy) ahora te quedas sin Delphi Prism (bah... Oxygene) pero ahi si podes pagar los usd 49 ... creo...

Lo de Oxygene es una ventaja a la larga, Remobjects ofrece mucho mas que embarcadero.

Saludos.

donald shimoda 30-04-2013 05:39:44

Cita:

Empezado por avmm2004 (Mensaje 459174)
Hola Donald, aprovechando tu comentario...... ¿ que tal oxigene para Android ? Bueno, estupendo, aceptable ...... ¿? ¿ ... ?

Que te digo, estoy trabajando en un projecto con Oyygene para java. Tiene un montón de ventajas porque podes usar cualquier API de android al instante. La desventaja principal: El entorno es lo mas INCOMODO que existe. Para el que uso Delphi alguna vez no va a poder creer lo LENTO que es todo dentro de Visual Studio. No termino de acostumbrarme sinceramente...

Por eso estoy esperando la versión para android de EMB a ver que tal pinta. Visual Studio es insalubre. :(

avmm2004 30-04-2013 10:40:46

mas leña al fuego ?
 
Acabo de conectarme a un distribuidor delphi.... acabo de ver las caracteristicas del producto .... y si quieres desarrollar para IOS con delphi Xe4 NO VALE la version profesional (aparte de no traer firedac) tiene que ser la enterprise o la architect con lo cual poniendome en la mas barata y teniendo en cuenta que no puedo hacer upgrade ya que tengo delphi 2007 me sale nada menos que 2199 euros.
Con lo mal que esta el negocio... me parece un abuso el precio. ¿ Será tan bueno el producto para estos precios ? Sinceramente, creo que no.

No es que no me guste delphi, que me encanta, sino que los precios no estan acorde con el mercado.

Por curiosidad he mirado en el mismo proveedor precios de Visual studio ( si ya lo se, es el enemigo) y estan bastante mas asequibles.

¡ Ojo ! no comparo productos, ya que para gusto se hicieron colores, sino tipo de herramientas, herramientas de desarrollo de propósito general.

Porque Embarcadero no se adecua a la realidad del mercado y nos ¿ explota ? de esta manera.

donald shimoda 30-04-2013 18:42:22

Cita:

Empezado por avmm2004 (Mensaje 459570)
Acabo de conectarme a un distribuidor delphi.... acabo de ver las caracteristicas del producto .... y si quieres desarrollar para IOS con delphi Xe4 NO VALE la version profesional (aparte de no traer firedac) tiene que ser la enterprise o la architect con lo cual poniendome en la mas barata y teniendo en cuenta que no puedo hacer upgrade ya que tengo delphi 2007 me sale nada menos que 2199 euros.
Con lo mal que esta el negocio... me parece un abuso el precio. ¿ Será tan bueno el producto para estos precios ? Sinceramente, creo que no.

Oxygene para Windows (.NET)/ Android y Mac USD 499, trae versión completa de Visual Studio. Como contra, el desarrollo se vuelve poco confortable para mi gusto. Pero es cuestión de probarlo.

gatosoft 01-05-2013 00:05:31

Cita:

Empezado por avmm2004 (Mensaje 459570)
Acabo de conectarme a un distribuidor delphi.... acabo de ver las caracteristicas del producto .... y si quieres desarrollar para IOS con delphi Xe4 NO VALE la version profesional (aparte de no traer firedac) tiene que ser la enterprise o la architect con lo cual poniendome en la mas barata y teniendo en cuenta que no puedo hacer upgrade ya que tengo delphi 2007 me sale nada menos que 2199 euros.
Con lo mal que esta el negocio... me parece un abuso el precio. ¿ Será tan bueno el producto para estos precios ? Sinceramente, creo que no.

No es que no me guste delphi, que me encanta, sino que los precios no estan acorde con el mercado.

Por curiosidad he mirado en el mismo proveedor precios de Visual studio ( si ya lo se, es el enemigo) y estan bastante mas asequibles.

¡ Ojo ! no comparo productos, ya que para gusto se hicieron colores, sino tipo de herramientas, herramientas de desarrollo de propósito general.

Porque Embarcadero no se adecua a la realidad del mercado y nos ¿ explota ? de esta manera.

Bueno, la versión profesional, ya no permite trabajar con motores de bases de datos Cliente Servidor (Solo conexiones locales o embebidas), tampoco tiene los componentes FireDac, ni el soporte iOS... entonces..... ¿qué tiene de profesional?... con esta situación nos empujan cada vez mas a subirnos de versión ...

Hace un tiempo pensé que Embarcadero estaba entrando en una estrategia para bajar el precio del producto de forma gradual, mediante los "productos adicionales que ofrecen", por ejemplo, el acceso a versiones anteriores nos permite tener dos licencias legales de delphi, aunque una de ellas es por lo menos una versión inferior... Yo por ejemplo adquirí la version XE y pude licenciar una 2010... cuando hice el upgrade a XE3, me dieron acceso adiconal a una XE2....

Además, estuvo ofreciendo promociones como por ejemplo, adquirir RAD o la verción ultimate por el precio de Delphi sencillo... lo cual nos da acceso a algunas versiones de las herramientas de base de datos de embarcadero


Pero... parece que no es del todo asi.... proque los precios siguen siendo muy altos y no atraen nuevos progrmadores... los que somos fanaticos del lenguaje, lo pensamos mucho antes de volver a pensar en una inversión.

Yo personalmente, sugiero esperar a que salga la versión con soporte Android... (Septiembre, diciembre, Febrero)... valdrá la pena esperar ya sea por upgrade o por nueva licencia... Al final los números mostraran a embarcadero que debe pensar mejor la estrategia de coemrcialización de sus nuevos parches-versiones. Veremos quien resiste mas....

cmm07 01-05-2013 23:06:20

Cita:

Empezado por gatosoft (Mensaje 459622)
Bueno, la versión profesional, ya no permite trabajar con motores de bases de datos Cliente Servidor (Solo conexiones locales o embebidas), tampoco tiene los componentes FireDac, ni el soporte iOS... entonces..... ¿qué tiene de profesional?... con esta situación nos empujan cada vez mas a subirnos de versión ...

Hace un tiempo pensé que Embarcadero estaba entrando en una estrategia para bajar el precio del producto de forma gradual, mediante los "productos adicionales que ofrecen", por ejemplo, el acceso a versiones anteriores nos permite tener dos licencias legales de delphi, aunque una de ellas es por lo menos una versión inferior... Yo por ejemplo adquirí la version XE y pude licenciar una 2010... cuando hice el upgrade a XE3, me dieron acceso adiconal a una XE2....

Además, estuvo ofreciendo promociones como por ejemplo, adquirir RAD o la verción ultimate por el precio de Delphi sencillo... lo cual nos da acceso a algunas versiones de las herramientas de base de datos de embarcadero


Pero... parece que no es del todo asi.... proque los precios siguen siendo muy altos y no atraen nuevos progrmadores... los que somos fanaticos del lenguaje, lo pensamos mucho antes de volver a pensar en una inversión.

Yo personalmente, sugiero esperar a que salga la versión con soporte Android... (Septiembre, diciembre, Febrero)... valdrá la pena esperar ya sea por upgrade o por nueva licencia... Al final los números mostraran a embarcadero que debe pensar mejor la estrategia de coemrcialización de sus nuevos parches-versiones. Veremos quien resiste mas....

Queeee!!, de verdad le quitaron o no tiene nada de eso la version professional??, si es asi que rayada mas grande de embarcaderos y hasta le enviaria un insulto, disculpen, pero como carajo no trae esas cosas y obligan s compra la de 2500 dolares , que pavada :o, no lo puedo cree, de verdaf que me dejarian tranquilo si desmienten esto...

Al González 01-05-2013 23:57:13

Cita:

Empezado por gatosoft (Mensaje 459622)
[...] la versión profesional, ya no permite trabajar con motores de bases de datos Cliente Servidor (Solo conexiones locales o embebidas [incrustadas]) [...]

Respecto a la parte que cito, hasta donde tengo entendido esa era la intención inicial de algunos directivos en Embarcadero. Se "filtró" un mensaje de correo electrónico que hablaba de ello, algunos miembros de la comunidad protestaron, luego David Intersimone lo confirmó (cuando salió a tratar de calmar los ánimos), como consecuencia la protesta se hizo multitudinaria, y entonces fue revisada esa decisión.

Hasta donde tengo entendido, finalmente sí pueden crearse aplicaciones cliente-servidor (técnica y legalmente) con la edición Professional. Aquel intento de absurda restricción no pudo contra el sentido común. :)

Saludos.

egostar 02-05-2013 02:25:49

Cita:

Empezado por gatosoft
.......Bueno, la versión profesional, ya no permite trabajar con motores de bases de datos Cliente Servidor (Solo conexiones locales o embebidas), tampoco tiene los componentes FireDac, ni el soporte iOS... entonces..... ¿qué tiene de profesional?... con esta situación nos empujan cada vez mas a subirnos de versión .....

Cita:

.....Queeee!!, de verdad le quitaron o no tiene nada de eso la version professional??, si es asi que rayada mas grande de embarcaderos y hasta le enviaria un insulto, disculpen, pero como carajo no trae esas cosas y obligan s compra la de 2500 dolares , que pavada , no lo puedo cree, de verdaf que me dejarian tranquilo si desmienten esto...
Sólo algunas precisiones para refrescar la memoria.

1. ya no permite trabajar con motores de bases de datos Cliente Servidor (Solo conexiones locales o embebidas)

Ya lo aclaró oprtunamente Al González

2. tampoco tiene los componentes FireDac

Ni antes ni ahora, los componentes AnyDAC siempre han sido de pago, ahora las versiones entreprise y mayores lo traen "gratis"

3. ni el soporte iOS

No lo tenía XE3, porque el asombro ahora.

Saludos

avmm2004 02-05-2013 08:29:32

Cita:

Empezado por egostar (Mensaje 459683)

.....
3. ni el soporte iOS

No lo tenía XE3, porque el asombro ahora.

Saludos

Según tengo entendido, el soporte para IOS (Ipad/ iphone ) es nuevo en XE4. El soporte para Mac, no.

Para mi una de las principales justificaciones de delphi xe4 es IOS y Android (que no estará hasta xe5 ?) en diferencia con xe2 y xe3.

Y si el tenerlos es pagar dos mil y pico euros, no gracias es demasiado para mi economía.

egostar 02-05-2013 08:50:38

Cita:

Empezado por avmm2004 (Mensaje 459690)
Según tengo entendido, el soporte para IOS (Ipad/ iphone ) es nuevo en XE4. El soporte para Mac, no.

Para mi una de las principales justificaciones de delphi xe4 es IOS y Android (que no estará hasta xe5 ?) en diferencia con xe2 y xe3.

Y si el tenerlos es pagar dos mil y pico euros, no gracias es demasiado para mi economía.

Puedes comprar Delphi Professional como usuario nuevo en 899 dlls mas el Mobile Add-On en 449 dlls (899+449=1348) que es mucho menos que comprar la versión Enterprise y ya puedes desarrollar para iOS. O puedes esperar a que salga Android, nadie obliga a comprar ahora.

Y sí, estoy de acuerdo que nadie está peleado con su dinero.

Saludos

aacheron 02-05-2013 11:36:47

Con este panorama, me quedo con RAD XE Professional hasta que se soporte Android. Mala política la de embarcadero. Espero que con los componentes IBX que acaban de sacar para XE4 suavicen la metida de pata, aún así, el precio de las licencias se están disparando y no me ofrecen motivos para actualizar (iOS no me interesa en absoluto y para OSX utilizo Lazarus).

Al González 02-05-2013 15:18:29

Algo de llamar la atención, en la nueva XE4, es que se dejará de usar Free Pascal Compiler (FPC) al crear aplicaciones para iOS.

Cita:

Unlike Delphi XE2 which used the Free Pascal compiler to generate the iOS code, XE4 handles everything natively. You still, of course, need an intel-based Mac running Lion or Mountain Lion, and like with Mac OS development, Embarcadero provide the Platform Assistant (PAServer) which runs on the Mac. Your Delphi project will communicate with the PAServer on the Mac (as set in Project Options, see screenshot below), which in turn communicates with XCode via the command line to deploy your project in the iOS Simulator or onto your iOS Device.
Enlace.

Antecedente.

Saludos.

donald shimoda 02-05-2013 18:09:57

Cita:

Empezado por avmm2004 (Mensaje 459690)
Según tengo entendido, el soporte para IOS (Ipad/ iphone ) es nuevo en XE4. El soporte para Mac, no.

Para mi una de las principales justificaciones de delphi xe4 es IOS y Android (que no estará hasta xe5 ?) en diferencia con xe2 y xe3.

Y si el tenerlos es pagar dos mil y pico euros, no gracias es demasiado para mi economía.

No. En XE2 estaba todo el soporte (aunque no funcionaba... literalmente), que luego fue retirado en XE3 y refrito en XE4.

http://www.delphifeeds.com/go/s/103534

Saludos.

donald shimoda 02-05-2013 18:16:54

Cita:

Empezado por Al González (Mensaje 459703)
Algo de llamar la atención, en la nueva XE4, es que se dejará de usar Free Pascal Compiler (FPC) al crear aplicaciones para iOS.


Enlace.

Antecedente.

Saludos.


Otro detalle es el regalito que le hicieron mis colegas de RemObjects : tanto la RO SDK como DataAbstracts no soportará ninguna de estas nuevas tecnologías (android, mac) a través de delphi. Porque? Bueno porque ahora se han vuelto competencia total y para ellos es mucho mas sencillo resolverlo con Oxygene. Es obvio que son dos conceptos totalmente diferentes : con Delphi usas librerías que enmascaran la real funcionalidad de la tecnología de fondo (con sus pros y sus contras) mientras con Oxygene accedes de manera directa a lo que ofrece la misma.

Otro motivo para que los usuarios de RO se pasen a Oxygene.

Estoy buscando el link donde marc hoffman lo explicaba hace días, pero no lo encuentro. Si aparece lo posteo.

gatosoft 02-05-2013 18:41:11

Cita:

Empezado por Al González (Mensaje 459674)

Hasta donde tengo entendido, finalmente sí pueden crearse aplicaciones cliente-servidor (técnica y legalmente) con la edición Professional. Aquel intento de absurda restricción no pudo contra el sentido común. :)

Saludos.

Pues para mi es claro que no es posible, según el comparativo de versiones del producto. Fíjense en el ítem(Database Application Architectures)





Cita:

Empezado por egostar (Mensaje 459683)
Sólo algunas precisiones para refrescar la memoria.

2. tampoco tiene los componentes FireDac

Ni antes ni ahora, los componentes AnyDAC siempre han sido de pago, ahora las versiones entreprise y mayores lo traen "gratis"



Es cierto que siempre han sido de pago, yo de hecho los adquirí a DevArt para mi versión XE. Sin embargo, los FireDac pretenden ser el estandar de embarcadero para Delphi, y supongo que con el tiempo irán desmontando dbExpress para irlo acopalndo a lo nuevo. Asi como con el tiempo la VCL irá pasando a segundo plano gracias a FireMonkey.

Desde este punto de vista... ¿por qué cobrar por funcionaldiades que quieren convertir en nativas?... Bueno es un punto de vista.



Cita:

Empezado por egostar (Mensaje 459683)
3. ni el soporte iOS
No lo tenía XE3, porque el asombro ahora.


Desde la salida de FireMonkey 1, se ofrece la posibilidad de construir aplicacioens para MAC... esta vez se hace de manera nativa, sin puentes con xCode... Insisto: ¿Por que cobrar, adicional a una licencia tan cara, las funcionalidades que podrían convertirse en las más utilizadas?

donald shimoda 02-05-2013 19:03:47

Cita:

Empezado por gatosoft (Mensaje 459724)
Pues para mi es claro que no es posible, según el comparativo de versiones del producto. Fíjense en el ítem(Database Application Architectures)

Indica que no trae componentes para ello, no que no es posiblñe o prohibido por licencia, que es a lo que se refiere Al. En su momento quisieron emitir una licencia prohibiendo acceso cliente server aun utilizando componentes de terceros.

Cita:

Empezado por gatosoft (Mensaje 459724)
Es cierto que siempre han sido de pago, yo de hecho los adquirí a DevArt para mi versión XE.

Como te habrá vendido Devart los Anydac?
:rolleyes:
Devart no es la empresa que producia Anydac, adquirido por EMB, ahora llamado Firedac. Da-Soft es la empresa que producía Anydac. http://www.da-soft.com/anydac/

gatosoft 02-05-2013 19:10:08

Cita:

Empezado por donald shimoda (Mensaje 459726)
Como te habrá vendido Devart los Anydac?
:rolleyes:
Devart no es la empresa que producia Anydac, adquirido por EMB, ahora llamado Firedac. Da-Soft es la empresa que producía Anydac. http://www.da-soft.com/anydac/

Ok, tienes razón... adquirí los UniDAC de DevArt, que para mi en su momento, tenían la misma funcionalidad..

egostar 02-05-2013 19:20:26

Cita:

Empezado por gatosoft (Mensaje 459724)
Pues para mi es claro que no es posible, según el comparativo de versiones del producto. Fíjense en el ítem(Database Application Architectures)

Es cierto que siempre han sido de pago, yo de hecho los adquirí a DevArt para mi versión XE. Sin embargo, los FireDac pretenden ser el estandar de embarcadero para Delphi, y supongo que con el tiempo irán desmontando dbExpress para irlo acopalndo a lo nuevo. Asi como con el tiempo la VCL irá pasando a segundo plano gracias a FireMonkey.

Desde este punto de vista... ¿por qué cobrar por funcionaldiades que quieren convertir en nativas?... Bueno es un punto de vista.

Desde la salida de FireMonkey 1, se ofrece la posibilidad de construir aplicacioens para MAC... esta vez se hace de manera nativa, sin puentes con xCode... Insisto: ¿Por que cobrar, adicional a una licencia tan cara, las funcionalidades que podrían convertirse en las más utilizadas?


Pues podríamos llevar ésto a una discusión bizarra y sin sentido dado que ni tu ni yo podemos cambiar (por el momento) tal disposición. Sin embargo, lo que todos tenemos es la ventaja de comprar o no comprar la nueva versión de Delphi, claro, si corresponde o no al costo/beneficio asociado a nuestros proyectos.

Saludos


La franja horaria es GMT +2. Ahora son las 16:54:26.

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