Ir al contenido

Capítulo 22: Métodos con valor de retorno

Parte IV: Flujo de control y decisiones - Sección 9: Métodos y organización - Nivel: Principiante


Al finalizar este capítulo serás capaz de:

  • Crear métodos auxiliares que retornan valores (bool, string, int)
  • Refactorizar código complejo moviendo lógica a métodos separados
  • Usar el valor de retorno para tomar decisiones en el flujo del script
  • Escribir código más limpio y mantenible

  • Conocimiento básico de métodos en C# (Parte I)
  • Atributo [Start]
  • MessageBox

A medida que tus scripts crecen, el método [Start] puede volverse enorme y difícil de leer.

Código desordenado:

[Start]
public void Function()
{
// 50 líneas de validación
// 30 líneas de cálculo
// 20 líneas de exportación
}

Código limpio:

[Start]
public void Function()
{
if (!ValidarProyecto()) return;
int total = CalcularTotal();
Exportar(total);
}

Para lograr esto, necesitas métodos que retornen valores.


La sintaxis es C# estándar. Lo importante es cómo aplicarlo para interactuar con la API de EPLAN.

private TipoDeDato NombreDelMetodo(Parametros)
{
// Lógica
return valor;
}

Basado en EPLAN-Scripting-4.0/04_CodeFlow/06_MethodReturnValue.cs:

using System.Windows.Forms;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
public class MetodosConRetorno
{
[Start]
public void Function()
{
// Llamar al método y usar su resultado
if (CheckProjectName())
{
MessageBox.Show("El proyecto es válido. Continuando...");
// Lógica principal aquí
}
else
{
MessageBox.Show("Operación cancelada.");
}
}
// Método auxiliar que retorna un booleano
private bool CheckProjectName()
{
string projectName = PathMap.SubstitutePath("$(PROJECTNAME)");
if (string.IsNullOrEmpty(projectName) || projectName.StartsWith("$("))
{
MessageBox.Show("Error: No hay proyecto abierto.");
return false;
}
if (projectName.Contains("DEMO"))
{
MessageBox.Show("Advertencia: Es un proyecto DEMO.");
// Aun así permitimos continuar, pero avisamos
return true;
}
return true;
}
}

Análisis:

  • CheckProjectName encapsula la lógica de obtener y validar el nombre.
  • El método [Start] queda limpio: “Si el proyecto es válido, continuar”.

private string GetExportPath(string fileName)
{
string projectPath = PathMap.SubstitutePath("$(PROJECTPATH)");
return System.IO.Path.Combine(projectPath, "Export", fileName);
}

Uso:

string fullPath = GetExportPath("listado.txt");
private int CalcularPaginas(int esquematicas, int reportes)
{
// Lógica de negocio encapsulada
return esquematicas + reportes;
}

El return no solo devuelve un valor, también termina la ejecución del método inmediatamente. Esto es muy útil para validaciones (Guards).

Sin Early Return (Nested Ifs - “Arrow Code”):

public bool Validar()
{
if (Condicion1)
{
if (Condicion2)
{
if (Condicion3)
{
return true;
}
}
}
return false;
}

Con Early Return (Cleaner):

public bool Validar()
{
if (!Condicion1) return false;
if (!Condicion2) return false;
if (!Condicion3) return false;
return true;
}

4. Proyecto del capítulo: Calculadora de Nombres

Sección titulada «4. Proyecto del capítulo: Calculadora de Nombres»

Vamos a crear un script que genere nombres de archivo estandarizados usando métodos auxiliares.

using System;
using System.Windows.Forms;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
public class GeneradorDeNombres
{
[Start]
public void Function()
{
string nombreBase = GetProjectName();
if (string.IsNullOrEmpty(nombreBase)) return;
string fecha = GetFormattedDate();
string nombreFinal = GenerateFileName(nombreBase, fecha, "PDF");
MessageBox.Show("Archivo generado será: " + nombreFinal);
}
// Método 1: Obtener nombre limpio
private string GetProjectName()
{
string pName = PathMap.SubstitutePath("$(PROJECTNAME)");
if (pName.StartsWith("$(")) return null;
return pName;
}
// Método 2: Obtener fecha formato ISO
private string GetFormattedDate()
{
return DateTime.Now.ToString("yyyyMMdd");
}
// Método 3: Combinar partes
private string GenerateFileName(string project, string date, string extension)
{
return string.Format("{0}_{1}_Export.{2}", project, date, extension);
}
}

  • Mueve la lógica compleja fuera de [Start].
  • Usa métodos private con tipos de retorno (bool, string, etc.).
  • Aprovecha el return para salir temprano de validaciones fallidas.
  • Nombra tus métodos con verbos que indiquen qué retornan (Get..., Check..., Calculate...).

Capítulo 21: BaseException - Mensajes del sistema

Capítulo 23: Sobrecarga de métodos

En el próximo capítulo aprenderás a crear múltiples versiones de un mismo método para manejar diferentes situaciones (polimorfismo estático).