[fpc-pascal] Food for thought - language string improvement

noreply at z505.com noreply at z505.com
Fri Jul 7 23:32:47 CEST 2017


On 2017-07-06 09:13, Graeme Geldenhuys wrote:
> Ever had a problem like this?  You have some SQL, say:
> 
> SELECT Customers.CustomerName, Orders.OrderID
> FROM Customers
> FULL OUTER JOIN Orders
> ON Customers.CustomerID = Orders.CustomerID
> ORDER BY Customers.CustomerName;
> 
> 
> and you want to add that SQL to the SQL property of a query at
> runtime. You end up either having to turn this into a string like
> this:
> 
> 'SELECT Customers.CustomerName, Orders.OrderID' +
> 'FROM Customers' +
> 'FULL OUTER JOIN Orders' +
> 'ON Customers.CustomerID = Orders.CustomerID' +
> 'ORDER BY Customers.CustomerName;'
> 
> or manually in each line like this (oh please NEVER do this!):
> 
> FDQuery1.SQL.Add('SELECT Customers.CustomerName, Orders.OrderID');
> FDQuery1.SQL.Add('FROM Customers');
> FDQuery1.SQL.Add('FULL OUTER JOIN Orders');
> FDQuery1.SQL.Add('ON Customers.CustomerID = Orders.CustomerID');
> FDQuery1.SQL.Add('ORDER BY Customers.CustomerName;');
> 
> 
> Now this has normally not been much of a problem for me, because part
> of tiOPF's support tools, there is a tool name tiSQLEditor  that does
> bi-directional conversions for you - to and from quoted strings for
> SQL. And even straight from/to the clipboard. This tool has been
> around for 17+ years. But why must this be a tool problem or a IDE
> problem? Why can't the Object Pascal language solve this for us!
> 
> [the following part quoted from a online discussion by somebody else -
> I fully agree with his thoughts though]
> 
> Imagine if FPC had type inference and multi-line strings, neither very
> exotic features. The code then becomes:
> 
> =========================================
> var query := '''SELECT Customers.CustomerName, Orders.OrderID
> FROM Customers
> FULL OUTER JOIN Orders
> ON Customers.CustomerID = Orders.CustomerID
> ORDER BY Customers.CustomerName;'''
> 
> FDQuery1.SQL.Add(query);
> =========================================
> 
> 
> Easier to read, easier to edit, no need for a IDE wizard or external 
> tools.
> 
> Language features like this is what increases productivity. But
> unfortunately it seems we all rather rely on a specific tool or IDE to
> improve our productivity - thus also locking us into using those tools
> only.
> 
> 
> Regards,
>   Graeme

This multiline string issue also helps with HTML:

s := '<html>' +
        '<head>' +
        '</head>' +
        '<body>' +

Instead it should be a multiline string:

s := '''
   <html>
     <head>
     </head>
     <body>
'''

There is also the backquote character, as an option..
`some string
on multiple
lines`


GoLang has multiline strings that work pretty good. AFAIR php has them 
too, especially for html work - but that is likely because PHP is for 
web programming and needed that feature more than Pascal did, so the 
strong need caused them to implement it more than other langauges.



More information about the fpc-pascal mailing list