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