2009-02-02 13 views
5

Es útil tener esqueletos o archivos de plantilla que solo puede copiar y usar como base para una nueva secuencia de comandos o aplicación.¿Cuáles son tus esqueletos favoritos para los diferentes idiomas?

Por ejemplo, utilizo los siguientes (emacs con el módulo de inserción automática abre automáticamente una copia del archivo esqueleto apropiado cuando creo un archivo nuevo).

Perl:

#!/usr/bin/perl -w 

use strict; 
use Getopt::Long; 

my $verbose = 1; 

GetOptions("verbose!" => \$verbose 
) or die("options error"); 

C++:

#include <iostream> 
#include <stdexcept> 

int main(int argc, char** argv){ 
    try{ 

    } 
    catch(std::exception& e){ 
    std::cerr << e.what() << std::endl; 
    return EXIT_FAILURE; 
    } 
    return EXIT_SUCCESS; 
} 

Posiblemente, se podría incluir el código básico para boost::program_options etc.

¿Cuáles son sus archivos favoritos esqueleto?

Respuesta

3

Mis plantillas Perl tener este aspecto:

Si estoy abriendo un módulo .pm:

use MooseX::Declare; 
class What::Ever { 

}; 

1; 

O, si no en un proyecto MooseX::Declare:

package What::Ever; 
use Moose; 

1; 

si se trata de una Archivo .pl:

#!/usr/bin/env perl 
use strict; 
use warnings; 
use feature ':5.10'; 

Como utilizo autoinsert.el, también hago que me pregunte si deseo usar FindBin; si ello ocurriese:

#!/usr/bin/env perl 
use strict; 
use warnings; 
use feature ':5.10'; 

use FindBin qw($Bin); 
use lib "$Bin/../lib"; 

El código necesario emacs está en mi repositorio elisp en http://github.com/jrockway/elisp/blob/fd5d73530a117a13ddcde92bc1c22aba1bfde1f0/_local/auto-inserts.el.

Por último, creo que preferirás MooseX::Getopt a Getopt simple. Es un enfoque mucho más sostenible para escribir scripts "únicos". (Las próximas líneas más o menos así:

use My::Script;     # that's why we did the "use lib" thing 
My::Script->new_with_options->run; # this parses the command line, creates a new object, and runs the script 

Todo el código importante va en una clase que puede ser unidad probada, pegado a una aplicación web, etc.)

+0

Genial, no sabía MooseX. ¡Gracias! – Frank

3

El único archivo esqueleto de lo que tengo es para LaTeX.

\documentclass{article} 
%\documentclass[11pt]{amsart} 
\usepackage[dvips]{graphicx} 
\usepackage{amsmath} 
\usepackage{amssymb} 
\usepackage{amsthm} 
\usepackage{cancel} 
\oddsidemargin0cm 
\topmargin-1cm 
\textwidth16.5cm 
\textheight23.5cm 
\parskip1ex 
\parindent0ex 
\begin{document} 
\title{ ... } 
\author{ ... } 
\date{ ... } 
\maketitle 

\end{document} 

Obviamente lo uso para escribir artículos de matemáticas.

De lo contrario, siempre empiezo desde cero. No hay un lenguaje de programación en el que pueda pensar que la infraestructura requerida sea más de lo que puede mantener en su cerebro o tomar más de 20 segundos para escribir.

+0

Multiplique la cantidad de archivos que crea en su vida por las 4 líneas de repetición por archivo ... y creo que le valdrá la pena dejar que su editor lo escriba. – jrockway

0

Cuando estoy escribiendo código que será OSS tengo una plantilla de placa de caldera simple que puedo introducir la licencia y la URL del texto de la licencia. La placa de la caldera tiene detalles del autor y otra basura codificada.

Para desarrollo comercial Tengo una placa de caldera con información de la empresa y avisos de copyright estándar en ella.

No guardo ningún esqueleto estándar porque he descubierto que recorté el contenido y agregué el mío de todos modos. La mayoría de los casos son lo suficientemente diferentes como para cambiar el esqueleto para que coincida, siempre y cuando se ataque a mano.

1

En Visual Studio, se llaman archivos de proyecto; mi favorito actual es de aplicación para Windows ;-)

+0

todavía no tiene sentido del humor en SO - muy triste –

1

Java

package edu.vt; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class Template 
{ 
    private Log log = LogFactory.getLog(getClass()); 

    /* Constructors 
    ***************************************************************************/ 

    public Template() 
    { 
    } 

    /* Accessors/Mutators 
    ***************************************************************************/ 

    /* Local Methods 
    ***************************************************************************/ 
} 

y

package testing.edu.vt; 

import edu.vt.Template; 
import junit.framework.TestCase; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class TemplateTestCase extends TestCase 
{ 
    private final Log log = LogFactory.getLog(getClass()); 

    public TemplateTestCase(final String name) 
    { 
     super(name); 
    } 

    protected void setUp() 
    { 
    } 

    protected void tearDown() 
    { 
    } 

    public void testLifeCycle() throws Exception 
    { 
     assertTrue(true); 
    } 
} 
+0

¿Realmente necesita todos esos ******* ... comentarios, especialmente teniendo en cuenta que puede saltar a cualquier definición de método con unas pocas teclas? – jrockway

+0

La mayoría del código es un candidato para una contribución de código abierto, donde es bueno dar contexto. Y ya hice un favor a todos y olvidé los bloques de comentarios de Javadoc. Recuerde, estos son archivos esqueleto. –

1

Python es simple, pero todavía ayuda si importa las cosas con nombres cortos, por ejemplo:

import sys 
import numpy as np 
import pylab as pyb 
import matplotlib.pyplot as plt 
import matplotlib as mpl 

Pero no lo hagas: import sk Ynet.

1

Bourne Shell

#!/bin/sh 

usage() { 
cat <<EOF 
    $0 <cmd> 
cmd: 
    samplecmd 
EOF 
} 

cmd=${1} 
shift 

case ${cmd} in 
    samplecmd) 
     arg1=${arg1:-${1}} # arg list takes precedence over env var 
     if [ "x${arg1}" = "x" ] ; then 
      usage 
     fi 
     samplecmd ${arg1} 
     ;; 
    *) 
     usage 
     ;; 
esac 

me gusta hacer pequeños scripts de ayuda como este para documentar los comandos que escriba en el caparazón.

Cuestiones relacionadas