MATLAB null conditional operator

조회 수: 8 (최근 30일)
Oleg Krivosheev
Oleg Krivosheev 2024년 1월 25일
편집: Stephen23 2024년 1월 25일
Hi, All
I'm interested in MATLAB null conditional operator or something very similar.
Suppose I have logger in MATLAB class/methods but want to use this class in another small project, where no logger is set up.
In C# I would code would look like
logger?.warn('WARNING');
...
logger?.debug('Three is 3');
and if external code sets logger to null, no calls would be made. So code continues to work just fine, like no logger is present. This is called null conditional operator.
Is there a similar idiom for MATLAB? How it could be done in most simple and elegant way?
Our logger is a singleton wrapping around log4j java class

답변 (2개)

Stephen23
Stephen23 2024년 1월 25일
편집: Stephen23 2024년 1월 25일
"How it could be done in most simple and elegant way?"
I assume that the aim is to not change the logging calls within the project code.
One approach would be to define a simple class that accepts any method call and does ... nothing:
logger = MyLogger();
logger.warn('WARNING'); % no error!
logger.debug('Three is 3'); % no error!
The class really is simple and does nothing:
type MyLogger
classdef MyLogger methods function obj = MyLogger() end function subsref(varargin) end end end

Hassaan
Hassaan 2024년 1월 25일
편집: Hassaan 2024년 1월 25일
Example Using 'isempty'
If your logger can be [] (empty) when it's not set:
if ~isempty(logger)
logger.warn('WARNING');
...
logger.debug('Three is 3');
end
Example Using 'isvalid'
If your logger is an object handle that can be invalid when not set:
if isvalid(logger)
logger.warn('WARNING');
...
logger.debug('Three is 3');
end
To make it more elegant and less repetitive, especially if you are doing this check frequently, you could wrap this logic in a method within your class or as a separate function:
function safeLog(logger, logType, message)
if ~isempty(logger) && ismethod(logger, logType)
logger.(logType)(message);
end
end
And use it like:
safeLog(logger, 'warn', 'WARNING');
...
safeLog(logger, 'debug', 'Three is 3');
Making your code cleaner and easier to maintain. It also adds flexibility, as you can easily extend or modify the logging behavior in one place. Remember that MATLAB's object-oriented capabilities are different from those in C#, so some adaptations are necessary.
-----------------------------------------------------------------------------------------------------------------------------------------------------
If you find the solution helpful and it resolves your issue, it would be greatly appreciated if you could accept the answer. Also, leaving an upvote and a comment are also wonderful ways to provide feedback.
It's important to note that the advice and code are based on limited information and meant for educational purposes. Users should verify and adapt the code to their specific needs, ensuring compatibility and adherence to ethical standards.
Professional Interests
  • Technical Services and Consulting
  • Embedded Systems | Firmware Developement | Simulations
  • Electrical and Electronics Engineering
Feel free to contact me.

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

태그

제품


릴리스

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by