In your question not all the strings to be checked for/to be forked are named.
This circumstance implies that in any case you need to adapt to your needs examples that are provided in answers.
Thus I assume the focus of your question is not on respondents doing the redefinition of \maketitle for you but is on respondents showing techniques for branching/forking which can be applied with macro programming in general and which you can apply when doing your own thing for \maketitle yourself.
Therefore in the following I don't provide a possible redefinition for \maketitle.
Instead I provide examples of forking-mechanisms where techniques are shown which you can as well apply when doing your own redefinition of \maketitle.
You can implement a forking-mechanism based on delimited arguments:
\documentclass{article}
\makeatletter
@ifdefinable\gobbletoexclam{\long\def\gobbletoexclam#1!{}}%
\newcommand\fork[1]{%
\ifcat$\detokenize\expandafter{\gobbletoexclam#1!}$% <- Check whether #1 is empty after removing stuff till first ! of the sequence "#1!"
\expandafter@firstoftwo\else\expandafter@secondoftwo\fi
{%
\selectcase
!#1! !lecture!presentation!speech!talk!interview!{We have emptiness}%
!!#1!lecture!presentation!speech!talk!interview!{We have space token}%
!! !#1!presentation!speech!talk!interview!{We have lecture}%
!! !lecture!#1!speech!talk!interview!{We have presentation}%
!! !lecture!presentation!#1!talk!interview!{We have speech}%
!! !lecture!presentation!speech!#1!interview!{We have talk}%
!! !lecture!presentation!speech!talk!#1!{We have interview}%
!! !lecture!presentation!speech!talk!interview!{We have something else without exclamation-mark}%
!!!!%
}{We have something else with exclamation-mark}%
}%
@ifdefinable\selectcase{%
\long\def\selectcase#1!! !lecture!presentation!speech!talk!interview!#2#3!!!!{#2}%
}%
\makeatother
\begin{document}
\fork{}
\fork{ }
\fork{lecture}
\fork{presentation}
\fork{speech}
\fork{talk}
\fork{interview}
\fork{whatsoever}
\fork{!whatsoever}
\end{document}

If you wish you can combine this with a routine for selecting an element from a list of arguments—this way you can "merge" cases quite easily if you want to have different groups of strings, where strings from different groups trigger different actions and strings from the same group trigger the same action each:
\documentclass{article}
\makeatletter
%% Code for \ExtractKthArg
%%=============================================================================
%% Paraphernalia:
%% \UD@firstoftwo, \UD@secondoftwo, \UD@PassFirstToSecond, \UD@Exchange,
%% \UD@stopromannumeral, \UD@CheckWhetherNull
%%=============================================================================
\newcommand\UD@firstoftwo[2]{#1}%
\newcommand\UD@secondoftwo[2]{#2}%
\newcommand\UD@PassFirstToSecond[2]{#2{#1}}%
\newcommand\UD@Exchange[2]{#2#1}%
@ifdefinable\UD@stopromannumeral{\chardef\UD@stopromannumeral=`^^00}%
%%-----------------------------------------------------------------------------
%% Check whether argument is empty:
%%.............................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%% {<Tokens to be delivered in case that argument
%% which is to be checked is empty>}%
%% {<Tokens to be delivered in case that argument
%% which is to be checked is not empty>}%
%%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
\romannumeral\expandafter\UD@secondoftwo\string{\expandafter
\UD@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
\UD@secondoftwo\string}\expandafter\UD@firstoftwo\expandafter{\expandafter
\UD@secondoftwo\string}\expandafter\UD@stopromannumeral\UD@secondoftwo}{%
\expandafter\UD@stopromannumeral\UD@firstoftwo}%
}%
%%=============================================================================
%% Extract K-th inner undelimited argument:
%%
%% \ExtractKthArg{<integer K>}%
%% {<tokens in case list of undelimited args doesn't have a k-th argumnent>}%
%% {<list of undelimited args>} %
%%
%% In case there is no K-th argument in <list of indelimited args> :
%% Does deliver <tokens in case list of undelimited args doesn't have a k-th argumnent.
%% In case there is a K-th argument in <list of indelimited args> :
%% Does deliver that K-th argument with one level of braces removed.
%%
%% Examples:
%%
%% \ExtractKthArg{0}{not available}{ABCDE} yields: not available
%%
%% \ExtractKthArg{3}{not available}{ABCDE} yields: C
%%
%% \ExtractKthArg{3}{not available}{AB{CD}E} yields: CD
%%
%% \ExtractKthArg{4}{not available}{{001}{002}{003}{004}{005}} yields: 004
%%
%% \ExtractKthArg{6}{not available}{{001}{002}{003}} yields: not available
%%
%%=============================================================================
\newcommand\ExtractKthArg[2]{%
\romannumeral%
% #1: <integer number K>
% #2: <action if there is no K-th argument>
\expandafter\UD@ExtractKthArgCheck
\expandafter{\romannumeral\number\number#1 000}{#2}%
}%
\newcommand\UD@ExtractKthArgCheck[3]{%
\UD@CheckWhetherNull{#1}{\UD@stopromannumeral#2}{% empty
\expandafter\UD@ExtractKthArgLoop\expandafter{\UD@firstoftwo{}#1}{#2}{#3}%
}%
}%
\begingroup
\def\UD@ExtractFirstArgLoop#1{%
\endgroup
@ifdefinable\UD@RemoveTillFrozenrelax{%
\long\def\UD@RemoveTillFrozenrelax##1##2#1{{##1}}%
}%
\newcommand\UD@ExtractKthArgLoop[3]{%
\expandafter\UD@CheckWhetherNull\expandafter{\UD@firstoftwo##3{}.}{\UD@stopromannumeral##2}{%
\UD@CheckWhetherNull{##1}{%
\UD@ExtractFirstArgLoop{##3#1}%
}{%
\expandafter\UD@PassFirstToSecond\expandafter{\UD@firstoftwo{}##3}%
{\expandafter\UD@ExtractKthArgLoop\expandafter{\UD@firstoftwo{}##1}{##2}}%
}%
}%
}%
}%
\expandafter\expandafter\expandafter\UD@ExtractFirstArgLoop
\expandafter\expandafter\expandafter{%
\expandafter\expandafter\ifnum0=0\fi}%
%% Usage of frozen-\relax as delimiter is for speeding things up by reducing the
%% amount of iterations needed. I chose frozen-\relax because David Carlisle
%% pointed out in <https://tex.stackexchange.com/a/578877>
%% that frozen-\relax cannot be (re)defined in terms of \outer and cannot be
%% affected by \uppercase/\lowercase.
%%
%% \UD@ExtractFirstArg's argument may contain frozen-\relax:
%% The only effect is that internally more iterations are needed for
%% obtaining the result.
\newcommand\UD@ExtractFirstArgLoop[1]{%
\expandafter\UD@CheckWhetherNull\expandafter{\UD@firstoftwo{}#1}%
{\expandafter\UD@stopromannumeral\UD@firstoftwo#1{}}%
{\expandafter\UD@ExtractFirstArgLoop\expandafter{\UD@RemoveTillFrozenrelax#1}}%
}%
%% End of code for \ExtractKthArg.
%%-----------------------------------------------------------------------------
%%-----------------------------------------------------------------------------
%% Code for forking mechanism
@ifdefinable\gobbletoexclam{\long\def\gobbletoexclam#1!{}}%
\newcommand\fork[1]{%
\ExtractKthArg{%
\expandafter\UD@CheckWhetherNull\expandafter{\gobbletoexclam#1!}%
{%
\selectcase
!#1! !lecture!presentation!speech!talk!interview!{1}% We have emptiness
!!#1!lecture!presentation!speech!talk!interview!{1}% We have space token
!! !#1!presentation!speech!talk!interview!{2}% We have lecture
!! !lecture!#1!speech!talk!interview!{3}% We have presentation
!! !lecture!presentation!#1!talk!interview!{4}% We have speech
!! !lecture!presentation!speech!#1!interview!{5}% We have talk
!! !lecture!presentation!speech!talk!#1!{6}% We have interview
!! !lecture!presentation!speech!talk!interview!{7}% We have something else without exclamation-mark
!!!!%
}{7}% We have something else with exclamation-mark
}{}{%
{We have emptiness or space token}%1
{We have lecture}% 2
{We have presentation}% 3
{We have speech}% 4
{We have talk}% 5
{We have interview}% 6
{We have something else}% 7
}%
}%
@ifdefinable\selectcase{%
\long\def\selectcase#1!! !lecture!presentation!speech!talk!interview!#2#3!!!!{#2}%
}%
%% End of code for forking mechanism
\makeatother
\begin{document}
\fork{}
\fork{ }
\fork{lecture}
\fork{presentation}
\fork{speech}
\fork{talk}
\fork{interview}
\fork{whatsoever}
\fork{!whatsoever}
\end{document}

If you wish a forking mechanism where you can provide arguments dynamically I suggest a slightly different routine for selecting an element from a list of arguments:
\documentclass{article}
\makeatletter
%% Code for \KeepKthOfLArguments:
%%=============================================================================
%% Paraphernalia:
%% \UD@firstoftwo, \UD@secondoftwo, \UD@PassFirstToSecond,
%% \UD@stopromannumeral, \UD@CheckWhetherNull
%%=============================================================================
\newcommand\UD@firstoftwo[2]{#1}%
\newcommand\UD@secondoftwo[2]{#2}%
\newcommand\UD@PassFirstToSecond[2]{#2{#1}}%
@ifdefinable\UD@stopromannumeral{\chardef\UD@stopromannumeral=`^^00}%
%%-----------------------------------------------------------------------------
%% Check whether argument is empty:
%%.............................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%% {<Tokens to be delivered in case that argument
%% which is to be checked is empty>}%
%% {<Tokens to be delivered in case that argument
%% which is to be checked is not empty>}%
%%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
\romannumeral\expandafter\UD@secondoftwo\string{\expandafter
\UD@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
\UD@secondoftwo\string}\expandafter\UD@firstoftwo\expandafter{\expandafter
\UD@secondoftwo\string}\expandafter\UD@stopromannumeral\UD@secondoftwo}{%
\expandafter\UD@stopromannumeral\UD@firstoftwo}%
}%
%%=============================================================================
%% Keep only the K-th of L consecutive undelimited arguments.
%% ( IF K < 1 OR K > L just remove L consecutive undelimited arguments. )
%%=============================================================================
%% \KeepKthOfLArguments{<integer number K>}%
%% {<integer number L>}%
%% <sequence of L consecutive undelimited arguments>
%%
%% If L < 1 yields nothing.
%% Else:
%% If K >= 1 and K < L yields:
%% <K-th undelimited argument from <sequence of L consecutive undelimited
%% arguments>>
%% If K < 1 or K > L
%% (-> there is no K-th argument in the
%% <sequence of L consecutive undelimited arguments> )
%% yields nothing but removal of <sequence of L consecutive
%% undelimited arguments>
\newcommand\KeepKthOfLArguments[2]{%
\romannumeral
% #1: <integer number K>
% #2: <integer number L>
\expandafter\UD@KeepKthOfLArgumentsKSmallerOneFork
\expandafter{\romannumeral\number\number#1 000\expandafter}%
\expandafter{\romannumeral\number\number#2 000}%
}%
%%-----------------------------------------------------------------------------
\newcommand\UD@KeepKthOfLArgumentsKSmallerOneFork[2]{%
% #1: <K letters m>
% #2: <L letters m >
\UD@CheckWhetherNull{#1}{% K is smaller than one:
\UD@KeepKthOfLArgumentsRemoveNArguments{#2}{\UD@stopromannumeral}{}%
}{% K is not smaller than one:
\expandafter\UD@PassFirstToSecond
\expandafter{%
\UD@firstoftwo{}#1%
}{%
\UD@KeepKthOfLArgumentsEvaluateLMinusKDifferenceLoop{#1}{#2}%
}{#2}%
}%
}%
%%-----------------------------------------------------------------------------
\newcommand\UD@KeepKthOfLArgumentsEvaluateLMinusKDifferenceLoop[4]{%
% #1: <K letters m>
% #2: <L letters m>
% (For detecting whether K>L or K<=L, during the loop letters m will
% be removed both from #1 and #2 until at least one of these arguments
% is empty.
% When the loop terminates with 0<K<=L, #1 will be empty and #2
% will hold an amount of letters m corresponding to the the
% difference L-K.
% When the loop terminates with K>L, #1 will not be empty and #2
% will be empty.
% )
% #3: <K-1 letters m>
% #4: <L letters m>
% (#3 and #4 will be left untouched during the loop so they can be
% used for performing appropriate action when loop terminates as
% it is known whether K>L.)
\UD@CheckWhetherNull{#1}{% We have K<=L:
\UD@KeepKthOfLArgumentsRemoveNArguments{%
#3%
}{%
\UD@KeepKthOfLArgumentsRemoveNArguments{#2}{\UD@stopromannumeral}%
}{}%
}{%
\UD@CheckWhetherNull{#2}{% We have K>L:
\UD@KeepKthOfLArgumentsRemoveNArguments{#4}{\UD@stopromannumeral}{}%
}{% We don't know yet whether K<=L or K>L, thus remove letters m and
% do another iteration:
\expandafter\UD@PassFirstToSecond
\expandafter{%
\UD@firstoftwo{}#2%
}{%
\expandafter\UD@KeepKthOfLArgumentsEvaluateLMinusKDifferenceLoop
\expandafter{%
\UD@firstoftwo{}#1%
}%
}{#3}{#4}%
}%
}%
}%
%%-----------------------------------------------------------------------------
%% \UD@KeepKthOfLArgumentsRemoveNArguments{<N letters m>}%
%% {<argument 1>}%
%% {<argument 2>}%
%% <sequence of consecutive
%% undelimited arguments>
%%.............................................................................
%% Removes the first N undelimited arguments from the <sequence of
%% consecutive undelimited arguments>, then inserts
%% <argument 1><argument 2>
%%
%% On the one hand when providing <argument 2> empty, you can use
%% <argument 1> for nesting calls to \UD@KeepKthOfLArgumentsRemoveNArguments.
%% On the other hand you can provide a <space token> for stopping
%% \romannumeral-expansion as <argument 1> and have the
%% macro grab the <K-th undelimited argument> from the <sequence of L
%% consecutive undelimited arguments> as <argument 2>.
%%
\newcommand\UD@KeepKthOfLArgumentsRemoveNArguments[3]{%
%% #1: <N letters m>
%% #2: <Argument 1>
%% #3: <Argument 2>
\UD@CheckWhetherNull{#1}{#2#3}{%
\UD@firstoftwo{%
\expandafter\UD@KeepKthOfLArgumentsRemoveNArguments
\expandafter{%
\UD@firstoftwo{}#1%
}{#2}{#3}%
}%
}%
}%
%%-----------------------------------------------------------------------------
%% End of code for \KeepKthOfLArguments.
%%-----------------------------------------------------------------------------
%%-----------------------------------------------------------------------------
%% Code for forking mechanism
@ifdefinable\gobbletoexclam{\long\def\gobbletoexclam#1!{}}%
\newcommand\fork[1]{%
\KeepKthOfLArguments{%
\expandafter\UD@CheckWhetherNull\expandafter{\gobbletoexclam#1!}%
{%
\selectcase
!#1! !lecture!presentation!speech!talk!interview!{1}% Case: We have emptiness
!!#1!lecture!presentation!speech!talk!interview!{1}% Case: We have space token
!! !#1!presentation!speech!talk!interview!{2}% Case: We have lecture
!! !lecture!#1!speech!talk!interview!{3}% Case: We have presentation
!! !lecture!presentation!#1!talk!interview!{4}% Case: We have speech
!! !lecture!presentation!speech!#1!interview!{5}% Case: We have talk
!! !lecture!presentation!speech!talk!#1!{6}% Case: We have interview
!! !lecture!presentation!speech!talk!interview!{7}% Case: We have something else without exclamation-mark
!!!!%
}{7}% Case: We have something else with exclamation-mark
}{7}% <- 7 arguments holding tokens for 7 cases follow from which to select.
}%
@ifdefinable\selectcase{%
\long\def\selectcase#1!! !lecture!presentation!speech!talk!interview!#2#3!!!!{#2}%
}%
%% End of code for forking mechanism
\makeatother
\begin{document}
\fork{}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{ }%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{lecture}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{presentation}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{speech}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{talk}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{interview}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{whatsoever}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\fork{!whatsoever}%
{In the first argument we have emptiness or space token}%1
{In the first argument we have lecture}% 2
{In the first argument we have presentation}% 3
{In the first argument we have speech}% 4
{In the first argument we have talk}% 5
{In the first argument we have interview}% 6
{In the first argument we have something else}% 7
\end{document}

If the first part of your redefined \maketitle is always
\vspace*{-70pt}
{\sffamily\slshape\bfseries faculty, }{\textsf{chair}}\\
{\textsf{author}}
\vspace*{6pt}
, then you can, e.g., do:
\renewcommand\maketitle[1][]{% Now \maketitle has an optional argument whose default is "empty". You could as well provide "lecture" or one of the other strings/cases as default.
\vspace*{-70pt}%
{\sffamily\slshape\bfseries faculty, }{\textsf{chair}}\\
{\textsf{author}}%
\vspace*{6pt}%
\fork{#1}%
{<tokens in case #1 is empty (which is the default) or a single explicit space token>}%1
{<tokens in case #1 is "lecture">}% 2
{<tokens in case #1 is "presentation">}% 3
{<tokens in case #1 is "speech">}% 4
{<tokens in case #1 is "talk">}% 5
{<tokens in case #1 is "interview">}% 6
{<tokens in case #1 is something else>}% 7
}%
, with
{<tokens in case #1 is empty (which is the default) or a single explicit space token>} =
{%
{\huge\textsf{title}}%
\hrule
\vspace*{6pt}%
}%
, and with
{<tokens in case #1 is "lecture">} =
{%
{\huge\textsf{Lecture title}}%
\vspace*{6pt}%
{\textsf{\today}}%
\vspace*{12pt}%
\hrule
\vspace*{24pt}%
}%
The <tokens in case #1 is...>-thingies can as well consist of calls to whatsoever other helper-macros, which in turn from the .tex-input-file grab and process (different) constellations/amounts of arguments. This way you can have different sets of subsequent arguments depending on which case is given for \maketitle's #1.
You can also have \maketitle itself grab several arguments. Then within the <tokens in case #1 is...>-thingies these arguments can be referred as #1, #2, ..., #9.
With LaTeX's standard documentclasses article/report/book strings holding information about title, author, date and whom to thank usually are stored as internal macros \@title/\@author/\@date/\@thanks.
The user-macros \title/\author/\date/\thanks serve for redefining these internal macros.
Remarks:
The routines \ExtractKthArg and \KeepKthOfLArguments presented above can handle more than nine arguments/cases.
The routines \fork, \ExtractKthArg and \KeepKthOfLArguments presented above are based on expansion only. No temporary assignments (defining of scratch-macros or the like) take place.
Thus these routines can be used in expansion-contexts as well, e.g., between \csname..\endcsname, with \edef/\xdef and variants, with \message, with \write, with \number and \romannumeral, with expl3's c/o/x/e/f-type-arguments, with expl3's \exp:w..\exp_end:, etc.
With the mechanism formed by \gobbletoexclam, \selectcase and \fork it is assumed that none of the strings to be forked contains !.
Instead of ! you can choose any non-empty token-sequence
- which does not occur in any of the strings to be forked and
- which does contain neither
\outer-tokens nor
- explicit character-tokens of category 1 or 2 or 6
for separating the strings that are to be forked.
I suggest using a token-sequence which does not end with a control-word-token - this way TeX's reading-apparatus will not be in state S(skipping blanks) and single strings having a leading space-token won't be a problem.
In the real-life-scenario you may wish the (first) argument to be pre-processed before having applied \fork to it, e.g.,
\uppercase{\fork{#1}}{...}{...} or
\lowercase{\fork{#1}}{...}{...} or
\expanded{\unexpanded{\fork}{#1}}{...}{...} or
\uppercase\expandafter{\expanded{\unexpanded{\fork}{#1}}}{...}{...} or
\lowercase\expandafter{\expanded{\unexpanded{\fork}{#1}}}{...}{...} or whatever.
If using expl3 is an option for you, then the functions \str_case:nn/\str_case:nnTF/\str_case_e:nn/\str_case_e:nnTF of the expl3-package l3str might be of interest to you.
You can, e.g., do something like
\documentclass{article}
\ExplSyntaxOn
\let\MyStringCase=\str_case:nnTF
\ExplSyntaxOff
\renewcommand\maketitle[1][]{% Now \maketitle has an optional argument whose default is "empty". You could as well provide "lecture" or one of the other strings/cases as default.
\vspace{-70pt}%
{\sffamily\slshape\bfseries faculty, }{\textsf{chair}}\
{\textsf{author}}%
\vspace{6pt}%
\MyStringCase{#1}{%
{}{<tokens in case #1 is empty (which is the default)>}%
{ }{<tokens in case #1 is a single explicit space token>}%
{lecture}{<tokens in case #1 is "lecture">}%
{presentation}{<tokens in case #1 is "presentation">}%
{speech}{<tokens in case #1 is "speech">}%
{talk}{<tokens in case #1 is "talk">}%
{interview}{<tokens in case #1 is "interview">}%
}%
{%
<tokens to append in any of the cases listed above>%
}%
{%
<tokens in case #1 is something else>%
}%
}%
\begin{document}
\maketitle
\maketitle[]
\maketitle[ ]
\maketitle[lecture]
\maketitle[presentation]
\maketitle[speech]
\maketitle[talk]
\maketitle[interview]
\maketitle[whatsoever]
\end{document}
If <tokens to append in any of the cases listed above> is left empty, then the <tokens in case #1 is...>-thingies can as well consist of calls to whatsoever other helper-macros, which in turn from the .tex-input-file grab and process (different) constellations/amounts of arguments. This way you can have different sets of subsequent arguments depending on which case is given for \maketitle's #1.
You can also have \maketitle itself grab several arguments. Then within the <tokens in case #1 is...>-thingies and within <tokens to append in any of the cases listed above> these arguments can be referred as #1, #2, ..., #9.
With LaTeX's standard documentclasses article/report/book strings holding information about title, author, date and whom to thank usually are stored as internal macros \@title/\@author/\@date/\@thanks.
The user-macros \title/\author/\date/\thanks serve for redefining these internal macros.
David Kastrup's \strequal might be of interest to you also:
David Kastrup:
Comparing two strings known to consist only of characters
\def\strequal#1{\number\strequalstart{}{}#1\relax}
\def\strequalstart#1#2#3{\if#3\relax\strequalstop\fi
\strequalstart{\if#3#1}{#2\fi}}
\def\strequalstop\fi\strequalstart#1#2#3{\fi#1#3\relax'#213 }
\if\strequal{junk}{#1} will be true for #1 being "junk", and false otherwise.
There are much more TeX pearls collected on the homepage of GUST (Polska Grupa Użytkowników Systemu TeX).
\maketitlealways take an argument or is that an optional argument? – Skillmon Oct 25 '21 at 19:33