Although in my previous post I argued that coding styles and formatting are only smoke and mirrors, latetly I found myself increasingly entangled in a dilemma concerning just that question. Namely, I suddenly found pleasure in writing my C++ statements using expressions rather than direct flow control constructs.
Want an expample? Here it is:
// housekeeping (type == QAmmMeasModel::MeasChannelNode) ? removeItemRef(m_measDefEntries, m_measDefFilesSz, defFileName, defFileIndex) : removeItemRef(m_rangeDefEntries, m_rangeDefFilesSz, defFileName, defFileIndex);instead of the more mundane (or, if you want, normal):
if(type == QAmmMeasModel::MeasChannelNode) { //........ } else { //........ }As such, it is rather to be seen as an innocent idiosyncracy of mine, but it didn't stopped there, culminating in the following substituton. Instead of the rather boring:
// houskeeping if(type == QAmmMeasModel::MeasChannelNode) { assert(m_measDefEntries.contains(key)); assert(m_measDefFiles.contains(defFileName)); m_measDefEntries.remove(key); if(m_measDefFiles[defFileName] == 1) m_measDefFiles.remove(defFileName); else m_measDefFiles[defFileName]--; } else { assert(m_rangeDefEntries.contains(key)); assert(m_rangeDefFiles.contains(defFileName)); m_rangeDefEntries.remove(key); if(m_rangeDefFiles[defFileName] == 1) m_rangeDefFiles.remove(defFileName); else m_rangeDefFiles[defFileName]--; }I came to consider using something more funky, like:
// lispy? (type == QAmmMeasModel::MeasChannelNode) ? (m_measDefEntries.remove(key), ((m_measDefFiles[defFileName] == 1) ? m_measDefFiles.remove(defFileName) : m_measDefFiles[defFileName]--)) : (m_rangeDefEntries.remove(key), ((m_rangeDefFiles[defFileName] == 1) ? m_rangeDefFiles.remove(defFileName) : m_rangeDefFiles[defFileName]--));You must admit that the second version is more succint, looks better and transmits some indefinite "guru" feeling. Unfortunately I had to let the asserts go, but it didn't occur to me as a great loss. So why did I delete the second version in the end? Simple. It was written for my client, and should be readable to all C++ programmers. In that way coolness was sacrificed on the altar of mediocrity ;) for the filthy lucre's sake ;).
Later in the day I chose the simpler solution and just wrote the removeItemRef() function hiding the ugly if() clause, but if I didn't do it, what do you think, which of the two versions should I had included in the code?
No comments:
Post a Comment