Conceptos de programación comparados en diferentes lenguajes con ejemplos de código

Actualización: noviembre 2007

Este es un ejemplo de código para los conceptos fundamentales de programación que no se pueden resumir con una palabra clave. Para obtener más información, vea Palabras clave comparadas en diferentes lenguajes.

Se ofrecen ejemplos de código para las tareas siguientes:

  • Instrucciones de asignación

  • Comentarios

  • Instrucciones condicionales

  • Declarar variables

  • Bucles For

  • Tipos genéricos

  • Ocultar miembros de clase base

  • Inicializar tipos de valor

  • Pasar parámetros por referencia

  • Pasar parámetros por valor

  • Instrucciones de selección

  • Establecer una referencia de objeto a Nothing

  • Control estructurado de excepciones

  • Bucles While

Declarar variables

Visual Basic

Dim x As Integer
Public x As Integer = 10

C++

int x;
int x = 10;

C#

int x;
int x = 10;

Jscript

var x : int;
var x : int = 10;
var x = 10;

Visual FoxPro

LOCAL x
X = 10

Comentarios

Visual Basic

' comment
x = 1   ' comment
Rem comment 

C++

// comment

/* multiline
 comment */

C#

// comment
/* multiline
 comment */

Jscript

// comment
/* multiline
 comment */

Visual FoxPro

* full line

USE  && end of line

NOTE multiline ;
   comment

Instrucciones de asignación

Visual Basic

nVal = 7

C++

nVal = 7;

C#

nVal = 7;

Jscript

nVal = 7;

Visual FoxPro

nVal = 7

O bien

STORE 7 to nVal

Instrucciones condicionales

Visual Basic

If nCnt <= nMax Then
   nTotal += nCnt  ' Same as nTotal = nTotal + nCnt.
   nCnt += 1       ' Same as nCnt = nCnt + 1.
Else
   nTotal += nCnt
   nCnt -= 1       
End If

C++

if(nCnt < nMax) {
 nTotal += nCnt;
 nCnt++;
 }
else {
   nTotal += nCnt;
   nCnt --;    
 };

C#

if (nCnt <= nMax)
{
   nTotal += nCnt;
   nCnt++;
}
else
{
   nTotal +=nCnt;
   nCnt--;
}

Jscript

if(nCnt < nMax) {
   nTotal += nCnt;
   nCnt ++;
}
else {
   nTotal += nCnt;
   nCnt --;
};

Visual FoxPro

IF nCnt < nMax
   nTot = nTot + nCnt
   nCnt = nCnt + 1
ELSE
   nTot = nTot + nCnt
   nCnt = nCnt - 1
ENDIF

Instrucciones de selección

Visual Basic

Select Case n
   Case 0
      MsgBox ("Zero")  
     ' Visual Basic exits the Select at the end of a Case.
   Case 1
      MsgBox ("One")
   Case 2 
      MsgBox ("Two")
   Case Else
      MsgBox ("Default")
End Select

C++

switch(n) {
 case 0:
  printf_s("Zero\n");
  break;
 case 1:
  printf_s("One\n");
  break;
 case 2:
  printf_s("Two\n");
  break;
 default:
  printf_s("?\n");}

C#

switch(n) 
{
   case 0:
      Console.WriteLine("Zero");
      break;
   case 1:
      Console.WriteLine("One");
      break;
   case 2:
      Console.WriteLine("Two");
      break;
   default:
      Console.WriteLine("?");
      break;
}

Jscript

switch(int(n)) {
   case 0 :
      print("Zero")
      break
   case 1 :
      print("One")
      break
   case 2 :
      print("Two")
   default :
      print("Default")
}

Visual FoxPro

DO CASE
 CASE n = 0
  ? 'Zero'
 CASE n > 0
  ? 'Pos'
 OTHERWISE
  ? 'Neg'
ENDCASE

Bucles For

Visual Basic

For n = 1 To 10 
   MsgBox("The number is " & n)
Next

For Each prop In obj
    prop = 42
Next prop

C++

for(int n=1; n<11; n++)
 printf_s("%d\n",n);

C#

for (int i = 1; i <= 10; i++) 
   Console.WriteLine("The number is {0}", i);
foreach (int i in testArr) 
{
   Console.WriteLine(i);
}

Jscript

for (var n = 0; n < 10; n++) {
   print("The number is " + n)
}
for (var prop in obj)
obj[prop] = 42

Visual FoxPro

FOR n = 1 TO 10
 ? n
ENDFOR

Ocultar miembros de clase base

Visual Basic

Public Class BaseCls
   Public Z As Integer = 100   ' The element to be shadowed
   public Sub Test()
      System.Console.WriteLine("Test in BaseCls")
   End Sub
End Class

Public Class DervCls
   Inherits BaseCls
   Public Shadows Z As String = "*"   ' The shadowing element.
   public Shadows Sub Test()
      System.Console.WriteLine("Test in DervCls")
   End Sub
End Class

Public Class UseClasses
   Dim BObj As BaseCls = New DervCls()   ' DervCls widens to BaseCls. 
   Dim DObj As DervCls = New DervCls()   ' Access through derived class.
   Public Sub ShowZ()
      System.Console.WriteLine("Accessed through base class: " & BObj.Z)
      System.Console.WriteLine("Accessed through derived class: " & DObj.Z)
      BObj.Test()
      DObj.Test()
   End Sub 
End Class

C++

#using <mscorlib.dll>
#include <stdio.h>
public __gc class BaseCls
{
public:
   int Z;   // The element to be hidden
   void Test()
   {
      printf_s("Test in BaseCls\n");
   }

};

public __gc class DervCls : public BaseCls
{
public:
   char Z;   // The hiding element
   void Test()
   {
      printf_s("Test in DervCls\n");
   }

};

public __gc class UseClasses
{
public:
   BaseCls * BObj;   // DervCls widens to BaseCls
   DervCls * DObj;   // Access through derived class
   void ShowZ()
   {
      BObj = new DervCls;
      BObj->Z = 100;
      DObj = new DervCls;
      DObj->Z = '*';
      printf_s("Accessed through base class: %d\n", BObj->Z);
      printf_s("Accessed through derived class: %c\n", DObj->Z);
      BObj->Test();
      DObj->Test();
   }
};

C#

public class BaseCls
{
   public int Z = 100;   // The element to be hidden
   public void Test()
   {
      System.Console.WriteLine("Test in BaseCls");
   }
}

public class DervCls : BaseCls
{
   public new string Z = "*";   // The hiding element
   public new void Test()
   {
      System.Console.WriteLine("Test in DervCls");
   }
}

public class UseClasses
{
   BaseCls BObj = new DervCls();   // DervCls widens to BaseCls
   DervCls DObj = new DervCls();   // Access through derived class
   public void ShowZ()
   {
      System.Console.WriteLine("Accessed through base class: {0}", BObj.Z);
      System.Console.WriteLine("Accessed through derived class: {0}", DObj.Z);
      BObj.Test();
      DObj.Test();
   }
}

Jscript

class BaseCls
{
   function get Z() : int { return 100 }   // The element to be hidden
}

class DervCls extends BaseCls
{
   hide function get Z() : String { return "*" }   // The element to be hidden
}

class UseClasses
{
   var BObj : BaseCls = new DervCls();   // DervCls widens to BaseCls
   var DObj : DervCls = new DervCls();   // Access through derived class

   function ShowZ()
   {
      print("Accessed through base class: " + BObj.Z);
      print("Accessed through derived class: " + DObj.Z);
   }
}

new UseClasses().ShowZ()

Visual FoxPro

oBase = newobject ("BaseCls")
oDerived = newobject ("DerivedCls")

?oBase.Z
?oDerived.Z

DEFINE CLASS BaseCls AS SESSION
   PROTECTED Z      && The element to be hidden outside of class
   Z = 100
ENDDEFINE

DEFINE CLASS DerivedCls AS BaseCls
   HIDDEN Z      && The hiding element from subclass
   Z = "*"
ENDDEFINE

Bucles While

Visual Basic

While n < 100 ' Test at start of loop.
   n += 1     ' Same as n = n + 1.
End While '

C++

while(int n < 100)
   n++;

C#

while (n < 100)
   n++;

Jscript

while (n < 100)
   n++;

Visual FoxPro

DO WHILE n < 100
 n = n + n
ENDDO

Pasar parámetros por valor

Visual Basic

Public Sub ABC(ByVal y As Long) ' The argument Y is passed by value.
' If ABC changes y, the changes do not affect x.
End Sub
   
ABC(x) ' Call the procedure.
' You can force parameters to be passed by value, regardless of how 
' they are declared, by enclosing the parameters in extra parentheses.
ABC((x))

C++

testMethod(i,j);

C#

/* Note that there is no way to pass reference types (objects) strictly by value. 
You can choose to either pass the reference (essentially a pointer), 
or a reference to the reference (a pointer to a pointer).*/
// The method:
void ABC(int x)
{
   ...
}
// Calling the method:
ABC(i);

Jscript

ABC(i)

Visual FoxPro

ABC(x)

O bien

DO ABC WITH (x)

Pasar parámetros por referencia

Visual Basic

Public Sub ABC(ByRef y As Long) 
' The parameter y is declared by by referece:
' If ABC changes y, the changes are made to the value of x.
End Sub

ABC(x) ' Call the procedure.

C++

// Prototype of ABC that takes a pointer to integer.
int ABC(long *py);
ABC(&VAR);
// Prototype of ABC that takes a reference to integer.
int ABC(long &y);
ABC(VAR);

C#

/* Note that there is no way to pass reference types (objects) strictly by value. 
You can choose to either pass the reference (essentially a pointer), 
or a reference to the reference (a pointer to a pointer).*/
/* Note also that unsafe C# methods can take pointers just like C++ methods. 
For details, see <MSHelp:link keywords="vclrfUnsafe" TABINDEX="0">unsafe</MSHelp:link>. */
// The method:
void ABC(ref int x)
{
   ...
}
// Calling the method:
ABC(ref i);

Jscript

/* Reference parameters are supported for external objects, but not 
internal JScript functions. Use '&' to call by reference */
testObject.ByRefMethod(&x);  

Visual FoxPro

ABC(@x)

O bien

DO ABC WITH x

Control estructurado de excepciones

Visual Basic

Try
   If x = 0 Then
      Throw New Exception("x equals zero")
   Else
      Throw New Exception("x does not equal zero")
   End If
Catch err As System.Exception
   MsgBox("Error: " & Err.Description)
Finally
   MsgBox("Executing finally block.")
End Try

C++

      __try{
      if (x == 0)
         throw new Exception ("x equals zero");
      else
         throw new Exception ("x does not equal zero");
         }
      __catch(Exception e)
{
            Console.WriteLine("Caught Exception"); 
      }
      __finally
{
         Console.WriteLine("Executing finally block");
      }

C#

// try-catch-finally
try
{
   if (x == 0)
      throw new System.Exception ("x equals zero");
   else
      throw new System.Exception ("x does not equal zero");
}
catch (System.Exception err)
{
   System.Console.WriteLine(err.Message);
}
finally
{
   System.Console.WriteLine("executing finally block");
}

Jscript

try {
   if (x == 0)
      throw "x equals zero"
   else
      throw "x does not equal zero"
}   
catch(e) {                          
   print("Error description: " + e)
}
finally {
   print("Executing finally block.")
}

Visual FoxPro

TRY
   IF x = 0
      THROW "x equals zero"
   ELSE
      THROW "x does not equal zero"
   ENDIF
CATCH TO err
   MESSAGEBOX("Error description: " + err.UserValue)
FINALLY
   MESSAGEBOX("Executing finally block.")
ENDTRY

Establecer una referencia de objeto a Nothing

Visual Basic

o = Nothing

C++

o = nullptr;  // when compiling with /clr

C#

o = null;

Jscript

o = undefined;

Visual FoxPro

TestObj = null

O bien

TestObj = .NULL.

Inicializar tipos de valor

Visual Basic

Dim dt as New System.DateTime(2001, 4, 12, 22, 16, 49, 844)

C++

System::DateTime dt = System::DateTime(2001, 4, 12, 22, 16, 49, 844);

C#

System.DateTime dt = new System.DateTime(2001, 4, 12, 22, 16, 49, 844);

Jscript

var dt : System.DateTime = new System.DateTime(2001, 4, 12, 22, 16, 49, 844);

Visual FoxPro

LOCAL ltDateTime AS DateTime 
ltDateTime = DATETIME(2001, 4, 12, 22, 16, 49) 

Tipos genéricos

Visual Basic

' Define a generic type
Public Class classMaker(Of t)
' Constrain a type parameter
Public Class classMaker(Of t As IComparable)
' Create an object from a generic type
Dim integerClass As New classMaker(Of Integer)

C++

// Define a generic type
generic <typename T> ref class testList { ... };
// Constrain a type parameter
generic <typename T> where T : IComparable<T>
ref class testList { ... };
// Create an object from a generic type
testList<int>^ list = gcnew testList<int>();

C#

// Define a generic type
public class testList<T>{...}
// Constrain a type parameter
public class testList<T> where T : IComparable<T>
// Create an object from a generic type
testList<int> list = new testList<int>();

Jscript

// Define a generic type
// Constrain a type parameter
// Create an object from a generic type

Visual FoxPro

* Define a generic type
* Constrain a type parameter
* Create an object from a generic type

Vea también

Referencia

Palabras clave comparadas en diferentes lenguajes

Tipos de datos comparados en diferentes lenguajes

Operadores comparados en diferentes lenguajes

Comparación de los controles y objetos programables de distintos lenguajes y bibliotecas

Otros recursos

Equivalentes del lenguaje

Visual J#