From: Alex Date: 2009-05-28T01:44:44+09:00 Subject: Re: Pythonic indentation (or: beating a dead horse) --001485f199442f6d04046ae78fcc Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit I'm just going to stick my head out for a second and say that I think the first code was more readable, with the end blocks. I LIKE being able to clearly see the end of a logical block. Yes, I can see the indentation change, but having a keyword end sections of code does a few things: 1. It's easier for me to read, especially if I'm just skimming through 2. It's easier to parse, and makes for cleaner parser code (to me, at least) Come on guys, it's only 3 characters. Pythonic indentation is a big debate among programming languages, so can't we just accept it how it is and move on? Or, if someone really wants to change it, fork ruby and make the change yourself. Put up or shut up, is my (probably unwanted) opinion on the subject. Alex On Wed, May 27, 2009 at 12:35 PM, J Haas wrote: > On May 22, 9:01 am, Roger Pack wrote: > > Tony's point was that certain constructs, like case statements, won't be > > transformable into indentation only blocks. Does that make sense? > > No, it doesn't, because I don't see why case statements are not > transformable into indent-only blocks. I've _done_ them using the > quick-and-dirty hacky script and they work just fine. (In cases like > Joshua's impossible.rb I had to make a minor modification to the > script to have it inject 'end ' rather than 'end\n', but it still > worked fine.) > > Code speaks louder than words, right? Here's some real-world code... > it's application_controller.rb from the AuthLogic example (http:// > github.com/binarylogic/authlogic_example/tree): > > ----------------- > > # Filters added to this controller apply to all controllers in the > application. > # Likewise, all the methods added will be available for all > controllers. > > class ApplicationController < ActionController::Base > helper :all > helper_method :current_user_session, :current_user > filter_parameter_logging :password, :password_confirmation > > private > def current_user_session > return @current_user_session if defined?(@current_user_session) > @current_user_session = UserSession.find > end > > def current_user > return @current_user if defined?(@current_user) > @current_user = current_user_session && > current_user_session.record > end > > def require_user > unless current_user > store_location > flash[:notice] = "You must be logged in to access this page" > redirect_to new_user_session_url > return false > end > end > > def require_no_user > if current_user > store_location > flash[:notice] = "You must be logged out to access this page" > redirect_to account_url > return false > end > end > > def store_location > session[:return_to] = request.request_uri > end > > def redirect_back_or_default(default) > redirect_to(session[:return_to] || default) > session[:return_to] = nil > end > end > > ----------------- > > Nothing particularly special about this code, right? Pretty standard > Ruby, if a bit simple? 37 non-blank, non-comment lines, of which 9 > consist of the bare word "end". I defy anyone to tell me that the code > would be less readable as this: > > ----------------- > > # Filters added to this controller apply to all controllers in the > application. > # Likewise, all the methods added will be available for all > controllers. > > class ApplicationController < ActionController::Base > helper :all > helper_method :current_user_session, :current_user > filter_parameter_logging :password, :password_confirmation > > private > def current_user_session: > return @current_user_session if defined?(@current_user_session) > @current_user_session = UserSession.find > > def current_user: > return @current_user if defined?(@current_user) > @current_user = current_user_session && > current_user_session.record > > def require_user: > unless current_user: > store_location > flash[:notice] = "You must be logged in to access this page" > redirect_to new_user_session_url > return false > > def require_no_user: > if current_user: > store_location > flash[:notice] = "You must be logged out to access this page" > redirect_to account_url > return false > > def store_location: > session[:return_to] = request.request_uri > > def redirect_back_or_default(default): > redirect_to(session[:return_to] || default) > session[:return_to] = nil > > > --001485f199442f6d04046ae78fcc--