| By Douglas Crockford's Department of Style | Article Rating: |
|
| December 12, 2008 06:15 PM EST | Reads: |
325 |
Certain elements in the Java and JavaScript communities have been buzzing about Tennent's Correspondence Principle. I have heard it described as the ability to replace an expression with a function, so that
expression
means the same thing as
(function () { returnexpression; })()
There are some things that can't be enclosed that way, such as return statements and break statements, which the advocates of Tennent's Correspondence Principle (or TCP) claim is a symptom of a bad smell. Yow! Language design is already difficult enough without having to cope with olfactory hallucinations. So to better understand the problem, I bought a copy of Tennent's 1981 book, Principles of Programming Languages.
It turns out that the Correspondence Principle is descriptive, not prescriptive. He uses it to analyze the (by now forgotten) Pascal programming language, showing a correspondence between variable definitions and procedure parameters. Tennent does not identify the lack of correspondence of return statements as a problem.
He does seem to have some specific notions of good programming language design, however. For example,
Many existing languages only managed to combine countless "features" into a jumble that is neither easy to implement nor a pleasure to use.
It is amazing how little has changed since 1981. He also has warnings about side effecting features such as getters and setters:
Side effects are often confusing to program readers because they are unexpected: the familiar expressions of conventional arithmetic and algebra do not have side effects.
Read the original blog entry...
Published December 12, 2008 Reads 325
Copyright © 2008 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
- Cloud People: A Who's Who of Cloud Computing
- New Relic Q1 2013 Blazes Past Growth Targets and Reaches 40,000 Active Customer Accounts
- Cloud Expo New York: Delivering Digital Marketing on the Cloud
- Cloudant to Exhibit at Cloud Expo & Big Data Expo New York
- Cloud Expo New York: Rethink IT and Reinvent Business with IBM SmartCloud
- The Accessibility of the Cloud
- Learn How To Use Google Apps Script
- Cloud Expo New York: Basics of SSD Technology and Its Use in Cloud
- Cloud Expo New York: Real-Time Analytics Using an In-Memory Data Grid
- Cloud Expo NY: Best Practices for Delivering Oracle Database as a Service
- Cloud Expo New York: The Big Challenge of Big Data & Hadoop Integration
- Measuring the Business Value of Cloud Computing
- Cloud People: A Who's Who of Cloud Computing
- Cloud Expo New York: Best CIO Practices Shared from SHI’s Customers
- Examining the True Cost of Big Data
- Cloud Expo New York: How to Use Google Apps Script
- Software Defined Networking – A Paradigm Shift
- New Relic Q1 2013 Blazes Past Growth Targets and Reaches 40,000 Active Customer Accounts
- Cloud Expo New York: Why Big Data Is Really About Small Data
- Cloud Expo New York: Delivering Digital Marketing on the Cloud
- Small Cancers, Big Data, and a Life Examined
- Cloud Expo New York: Requirements of a Cloud Database
- Cloud Expo NY: Calculating the True Value of Industry-Specific Clouds
- Cloudant to Exhibit at Cloud Expo & Big Data Expo New York
- A Cup of AJAX? Nay, Just Regular Java Please
- Java Developer's Journal Exclusive: 2006 "JDJ Editors' Choice" Awards
- JavaServer Faces (JSF) vs Struts
- The i-Technology Right Stuff
- Rich Internet Applications with Adobe Flex 2 and Java
- Java vs C++ "Shootout" Revisited
- Bean-Managed Persistence Using a Proxy List
- Reporting Made Easy with JasperReports and Hibernate
- Creating a Pet Store Application with JavaServer Faces, Spring, and Hibernate
- Why Do 'Cool Kids' Choose Ruby or PHP to Build Websites Instead of Java?
- What's New in Eclipse?
- Where Are RIA Technologies Headed in 2008?

























