I've been a ColdFusion developer for about 10 years now. I started with version 5.x and now work in 9.x. But, until recently, I hadn't updated myself with all of the improvements happening with each new version. Like many, I got caught up with client-side developments in HTML, CSS & JavaScript. A few months ago, I tasked myself with creating a ColdFusion payment gateway component. I wanted to make it extensible and the best way to do that was to take an object-oriented approach, one that ColdFusion did not offer, or so I thought at the time.
Over the years, I had stood by while ColdFusion took a beating for it's lack of object-oriented features. But, I remained loyal, and decided to stick it out with the procedural coding style I had always been used to. When a job demanded a more object-oriented approach, I simply switched to PHP or Python. With the daily demands of running a small web development business, I never got around to learning what each new ColdFusion version had to offer, even though I'd been upgrading to each new major version.
When I finally did glance over Adobe's latest ColdFusion documentation earlier this year, I was blown away! ColdFusion components were touted as the new way to package code, and not only did they support inheritance and polymorphism, but allowed to you define an interface as well. Each function could be declared public, private or remote. You get the usual this reference, but unlike some other OO languages (JavaScript comes first to mind), you're also supplied with a super reference, to access the parent class.
ColdFusion doesn't go so far as to support multiple inheritance, but hey, baby steps. And really, how many people out there have used multiple inheritance without completely killing the maintainability of their code by adding an unneeded complexity.
Admittedly, the syntax for creating a function and defining it's arguments is a bit clunky:
<cffunction name="myFunc" ...>
<cfargument name="myArg" ...>
</cffunction>
But, that's only if you haven't gotten comfortable with CFScript, which has a surprisingly Java-like syntax for defining a function:
public void function myFunc(String myArg) {
...
}
So, it appears to me that ColdFusion, which has always been a frontrunner in Rapid Database-Driven Application Development, now packs a double punch. It provides the incredibly intuitive tag-based syntax, if you want to code and deploy a website in under an hour. Yet, it also offers the OO capabilities required for large-scale projects.
In what other language can you, natively, define a class interface or create a dynamically generated downloadable PDF file, in just two lines of code?
In short, ColdFusion does now, and has for a while, offered all of the usual OO key components:
- Encapsulation
- Inheritance
- Polymorphism
- Interfaces
- Information hiding (variable scopes)
Of course, the cost of the ColdFusion license is often the deciding factor when a developer settles on PHP or other community driven language. But, consider your options:
- Are you a non-profit org?
- Will you use it in an academic setting?
- Do you need the full enterprise version?
- Can you settle for the development version, and let someone else foot the bill for the production server license?
- Are you willing to save a few dollars by purchasing a license on eBay?
There are ways to get your foot in the door, that is, the door to low-cost upgrade licenses. Once you purchase a full license, the upgrades come at a fraction of the cost.
Next stop is to introduce you to a good MVC framework like ColdBox. www.coldbox.org
Also, ColdFusion doesn't have to cost a dime. Check out free, open source Railo. www.getrailo.org
P.S. The comment form in your mobile layout seems broken. It kept telling me there was an error posting my comment. I think it might be relate to the fact that the "password" field did not show up.