Functional programming

Marko Rauhamaa marko at pacujo.net
Tue Mar 4 20:49:13 CET 2014


Antoon Pardon <antoon.pardon at rece.vub.ac.be>:

> In the same way writing unit tests is the most tedious, boring,
> annoying, *unproductive* part. Amost always you are giving the program
> results it can work out for itself.

Undoubtedly, explicit type declarations add a dimension of quality to
software. However, they also significantly reduce readability and tempt
you to dirty shortcuts (to avoid writing truckloads of boilerplate
code).

On the balance, I estimate the explicit style reduces code quality.

Example (found by a random Google search):

===JAVA BEGIN===========================================================

class WrappedSqlException extends RuntimeException {
    static final long serialVersionUID = 20130808044800000L;
    public WrappedSqlException(SQLException cause) { super(cause); }
    public SQLException getSqlException() { return (SQLException) getCause(); }
}

public ConnectionPool(int maxConnections, String url) throws SQLException {
    try {
        super(() -> {
            try {
                return DriverManager.getConnection(url);
            } catch ( SQLException ex ) {
                throw new WrappedSqlException(ex);
            }
        }, maxConnections);
    } catch (WrappedSqlException wse) {
        throw wse.getSqlException();
    }
}

===JAVA END=============================================================

===PYTHON BEGIN=========================================================

def __init__(self, max_connections, url):
    super().__init__(lambda: DriverManager.get_connection(url), max_connections)

===PYTHON END===========================================================

or, a bit less cryptically:

===PYTHON BEGIN=========================================================

def __init__(self, max_connections, url):
    def get_connection():
        return DriverManager.get_connection(url)

    super().__init__(get_connection, max_connections)

===PYTHON END===========================================================


Marko



More information about the Python-list mailing list