Traducir código de VB a lenguaje latino (entendible)

Hol, estoy checando un codigo que es de PUBLIC FUNCTION el cual tiene ciertas variables como

By val "dato" as double, optional by val dato2 as double

Etc etc

Lo que me gustaría saber es que alguien me explique como se interpreta

Y porque el uso de las variables

Espero su apoyo para poder entender, ya entre a varias páginas de internet para leer las variables pero no me queda claro al 100%

Espero su ayuda gracias

Public Function impuestos_patron(ByVal integrado As Double, Optional ByVal salario_base As Double, Optional ByVal prima_dominical As String)
Dim smgdf, cuota_fija, exc_smgdt, prestaciones, excedente, impuestos, tope As Double
Dim gastos_med, riesgo_tra, invalidez, guarderia, retiro, cesantia_vejez As Double
Dim infonavit, impuesto_nomina, pd, imp_estatal As Double
 smgdf = 73.04           'SALARIO MINIMO GENERAL DISTRITO FEDERAL
'----------- IMPUESTOS QUE PAGA EL PATRON
 cuota_fija = 20.4          'CUOTA FIJA DEL PATRON
 exc_smgdt = 0.011        'EXCEDENTE 3 SMGDF
 prestaciones = 0.007     'PRESTACIONES DINERO
 gastos_med = 0.0105      'GASTOS MEDICOS
 riesgo_tra = 0.005377    'RIESGO DE TRABAJO
 invalidez = 0.0175       'INVALIDEZ Y VIDA
 guarderia = 0.01         'GUARDERIA
 retiro = 0.02            'RETIRO
 cesantia_vejez = 0.0315  'CESANCIA Y VEJEZ
 infonavit = 0.05         'INFONAVIT
 impuesto_nomina = 0.025  'IMPUESTO SOBRE NOMINA
tope = smgdf * 3
excedente = 0
If salario_base > tope Then
   excedente = (integrado - tope) * exc_smgdt
End If
  pd = 0
If prima_dominical = "S" Or prima_dominical = "s" Then
   pd = salario_base * 0.25 / 7
End If
imp_estatal = (salario_base + (salario_base * 0.05) + (salario_base * 0.15) + pd) * impuesto_nomina
impuestos = (smgdf * (cuota_fija / 100)) + excedente + (integrado * prestaciones) + (integrado * gastos_med) + _
            (integrado * riesgo_tra) + (integrado * invalidez) + (integrado * guarderia) + _
            (integrado * retiro) + (integrado * cesantia_vejez) + (integrado * infonavit) + imp_estatal
'MsgBox "CUOTA FIJA : " & (smgdf * (cuota_fija / 100)) & " EXCEDENTE " & excedente & _
       " PRESTACIONES " & (integrado * prestaciones) & " GASTOS MEDICOS " & (integrado * gastos_med) & _
       " RIESGOS " & (integrado * riesgo_tra) & " INVALIDEZ " & (integrado * invalidez) & _
       " GUARDERIA " & (integrado * guarderia) & _
       " RETIRO " & (integrado * retiro) & " CESANTIA " & (integrado * cesantia_vejez) & _
       " INFONAVIT " & (integrado * infonavit) & " IMPUESTO NOMINA " & imp_estatal
impuestos_patron = Format(impuestos, "0.00")
End Function
Public Function impuestos_empleado(ByVal integrado As Double, Optional ByVal salario_base As Double)
Dim exc_smgdt, prestaciones, gastos_med, invalidez, cesantia_vejez As Double
Dim excedente, impuestos, tope, smgdf As Double
smgdf = 73.04
'-------- IMPUESTOS QUE PAGA EL EMPLEADO
exc_smgdt = 0.004        'EXCEDENTE 3 SMGDF
prestaciones = 0.0025    'PRESTACIONES DINERO
gastos_med = 0.00375     'GASTOS MEDICOS
invalidez = 0.00625      'INVALIDEZ Y VIDA
cesantia_vejez = 0.01125 'CESANTIA Y VEJEZ
tope = smgdf * 3
excedente = 0
If salario_base > tope Then
   excedente = (integrado - tope) * exc_smgdt
End If
impuestos = excedente + (integrado * prestaciones) + (integrado * gastos_med) + (integrado * invalidez) + (integrado * cesantia_vejez)
'MsgBox "EXCDENTE " & excedente & " PRESTACIONES " & (integrado * prestaciones) & "GASTOS MEDICOS " & (integrado * gastos_med) & " INVALIDEZ " & (integrado * invalidez) & " CESANTIA " & (integrado * cesantia_vejez)
impuestos_empleado = Format(impuestos, "0.00")
End Function
2

2 Respuestas

4.704.925 pts. Sancho, si los perros ladran ...

Puedes pasar un argumento como ByVal o como ByRef

La diferencia es que cuando pasas el argumento como ByVal, en teoría ese dato no debes cambiarlo.

Por ejemplo:

Public Function impuestos_empleado(ByVal integrado, ByRef excedente)
   excedente = excedente * 2
   impuestos_empleado = excedente + integrado
End Function

En el ejemplo anterior, el valor de la variable excedente lo estoy modificando, mientras que el valor de la variable integrado no lo modifico. Esa es la única diferencia.


Las funciones reciben argumentos o variables, esas variables las utilizan para realizar alguna operación y después la función regresa un resultado.

Según tu ejemplo, y para simplificar el ejemplo:

Public Function impuestos_empleado(ByVal integrado As Double, Optional ByVal salario_base As Double)
impuestos = excedente + (integrado * prestaciones) + (integrado * gastos_med) + (integrado * invalidez) + (integrado * cesantia_vejez)
impuestos_empleado = Format(impuestos, "0.00")
End Function

La función recibe 2 argumentos: integrado y salario_base

Con esos 2 argumentos realiza varias operaciones y almacena el resultado en la variable impuestos.

Al final regresa un resultado con esta línea:

impuestos_empleado = Format(impuestos, "0.00")


La función debe regresar el resultado con el mismo nombre de la función, ejemplo:

Function impuestos_empleado()
    impuestos_empleado = Format(impuestos, "0.00")
End Function

[sal u dos

5.650 pts.

La respuesta que te ha dado Dante Amor es perfecta, simplemente quería aportar un poco más.

No conozco nada de VB en concreto pero si un poco de programación.

  • Pasar un argumento por valor a una función (ByVal) es pasar el valor de una variable para dicho argumento, por lo que, como bien dice Dante Amor, no deberías cambiar su valor (hay lenguajes que no te lo permiten y los hay que te lo permiten pero no se va a ver reflejado en ningún sitio porque has cambiado un valor temporal que le has pasado a la función).
  • Pasar un argumento por referencia a una función (ByRef) es pasar la referencia d una variable a la función, es decir, su dirección en memoria. Por lo tanto, si modificas dicha variable dentro de la función SI que se va a ver afectada, ya que vas a modificar el espacio de memoria donde se encuentra dicha variable.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas