Refactor Introduce WithCode with many references attributes or methods of another object can be simplifed by introducing a "With ... End With" block. This can be particularly effective if a complex expression is repeated with every reference.
Languages:
Alternatives:[Examples]
In VbClassic: from...
rsObject.Open ... If rsObject.RecordCount = 0 Then rsObject.AddNew rsObject!PK = value End If rsObject!Attr = valueto...
With rsObject
.Open ...
If .RecordCount = 0 Then
.AddNew
!PK = value
End If
!Attr = value
End With
PascalLanguage:
from...
emp.name := "Joe"; emp.status := "X"; emp.bday.month := 6; emp.bday.day := 27; emp.bday.year := 1958;to...
with emp do
begin
name := "Joe";
status := "X";
with bday do
begin
month := 6;
day := 27;
year := 1958;
end
end
Applicability to other languages:
Applies to any language supporting the "with" shorthand.
Examples: Pascal
The refactoring can be done one step further, by removing the variable completely:
(Example in VbClassic) from...
set rst = dbs.TableDefs("tblWhatEver").OpenRecordset(dbOpenTable)
If not rst.EOF() Then
rst.AddNew
rst!PK = value
rst.Update
rst.Close
End If
Set rst = Nothing
to...
With dbs.TableDefs("tblWhatEver").OpenRecordset(dbOpenTable)
If not .EOF() Then
.AddNew
!PK = value
.Update
.Close
End If
End With
ContributorsList: JeffGrigg, (name of Pascal example author missing)
EditText of this page
(last edited January 28, 2009)
or FindPage with title or text search