Conceitos de programação comparados em vários idiomas, com exemplos de código
Aqui está o código de exemplo para os conceitos básicos de programação que não pode ser resumida com uma palavra-chave.Para obter mais informações, consulte Palavras-chave comparadas em vários idiomas.
Exemplos de código são apresentados para as seguintes tarefas:
Instruções de atribuição
Comentários
Instruções condicionais
Declarando variáveis
Loops for
Tipos genéricos
Ocultando os membros da classe Base
Inicializando os tipos de valor
Parâmetro passagem por referência
Passar por valor de parâmetro
Instruções de seleção
Definir uma referência de objeto como Nothing
Tratamento Estruturado Exceção
While Loops
Declarando variáveis
Visual Basic
Dim x As Integer
Public x As Integer = 10
Dim x = 10
C++
int x;
int x = 10;
var x = 10;
C#
int x;
int x = 10;
F#
let x = 10
Comentários
Visual Basic
' comment
x = 1 ' comment
Rem comment
C++
// comment
/* multiline
comment */
C#
// comment
/* multiline
comment */
F#
// comment
(* multiline
comment *)
Instruções de atribuição
Visual Basic
nVal = 7
C++
nVal = 7;
C#
nVal = 7;
F#
nVal <- 7
Instruções condicionais
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--;
}
F#
if (nCnt <= nMax) then
nTotal <- nTotal + nCnt
nCnt <- nCnt + 1
else
nTotal <- nTotal + nCnt
nCnt <- nCnt - 1
Instruções de seleção
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;
}
F#
Coincidir n com
| 0 - > Console.WriteLine("zero")
| 1 - > Console.WriteLine("One")
| 2 - > Console.WriteLine("two")
| _ - > Console.WriteLine("?")
Loops 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);
}
F#
for i = 1 to 10 do
printfn "%d" i
for i in testCollection do
printfn "%d" i
Ocultando os membros da classe 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();
}
}
F#
type BaseCls() =
member this.Z = 100
member this.Test() =
System.Console.WriteLine("Test in BaseCls")
type DervCls() =
inherit BaseCls()
member this.Z = "*"
member this.Test() =
System.Console.WriteLine("Test in DervCls")
type UseClasses() =
let BObj : BaseCls = new DervCls() :> BaseCls
let DObj : DervCls = new DervCls()
member this.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()
let useClassesObj = new UseClasses()
useClassesObj.ShowZ()
While Loops
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++;
F#
while n < 100 do
n <- n + 1
Passar por valor de parâmetro
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);
F#
let ABC(x) =
...
ABC(i)
Parâmetro passagem por referência
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);
F#
let ABC(x : int byref) =
...
ABC(&i)
Tratamento Estruturado Exceção
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");
}
F#
try
try
if x = 0 then
failwith "x equals zero"
else
failwith "x does not equal zero"
with
| Failure(msg) -> System.Console.WriteLine(msg)
finally
printfn "executing finally block"
Definir uma referência de objeto como Nothing
Visual Basic
o = Nothing
C++
o = nullptr; // when compiling with /clr
C#
o = null;
F#
// for an option type
o <- None
// when you really want a null value
o <- null
Inicializando os 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);
F#
let dt = new System.DateTime(2001, 4, 12, 22, 16, 49, 844)
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>();
F#
// Define a generic type
type testList<'T> =
...
// Constraint a type parameter
type testList<'T when 'T :> IComparable<'T>>
// Create an object from a generic type
let list1 = new testList<int>()
Consulte também
Referência
Palavras-chave comparadas em vários idiomas
Tipos de dados comparados em vários idiomas
Operadores de comparação em vários idiomas
Controles e objetos programáveis comparados em vários idiomas e bibliotecas