関数には引数がつきものです。ソースコード中のある関数を変更する際、関数中の引数を増やしたくなる時があります。しかしながら、単純な関数の引数部分の変更は関数の呼び出し側の変更も引き起こします。関数がどこで呼び出されているのか探すのは手間です。良い命名がされているならば複数ファイル中の文字列検索でどうにかなりますが、その様でないコードは少なくないです。目的が機能の追加であり、既存部分の機能が変わらないとなればなおさらやりたくないものです。そのような時に、この呼び出し側を気にしない引数であるデフォルト引数が役に立ちます。
デフォルト引数の書き方は次です。
void makecoffee(type = 'black'){/*処理*/}
大体の言語は同じように引数欄に”引数名=引数のデフォルト値”と設定できます。デフォルト引数の動作は、呼び出された時に引数が足りない場合は引数に設定されたデフォルト値が代入されて動く、引数が足りている場合は呼び出し側の値が代入されて動く、といった具合です。これで引数が足りないという構文エラーを回避して、僅かな書き換えで引数を追加できます。余談ですがjavaはこのデフォルト引数機能がありません。私の触れた周りでは関数の追加で解決していることが多かったです。次の様に引数の数が異なる呼び出し用関数を追加するわけですね。
void makecoffee(){makecoffee('black')}//0個の引数で呼び出される関数makecoffee()。固定された値を引数にしてmakecoffee(type)を呼び出す。
void makecoffee(type){/*処理*/}//1個の引数で呼び出される関数makecoffee(type)。
javaの様な同じ関数名を許容する言語の場合、この引数の異なる関数の追加は特に自然な感じで作れます。