Bei Sammlungen wird in einem normalen Projekt häufig die Codierungskonvention angezeigt, dass "Sammlungen leere Instanzen zurückgeben, ohne Nullen zurückzugeben". Andererseits haben viele Menschen diese Vereinbarung zum ersten Mal gehört. Infolgedessen sehen wir oft nutzlose Nullprüfungen. Wenn jemand mit Java-Erfahrung bei einem C # -Projekt half, gab es eine Person, die die Anzahl der Fälle überprüfte und dann eine for-Schleife durchführte. Ich bin der Meinung, dass der Erfassungsvorgang unabhängig von der Sprache nicht bekannt ist.
Betrachten Sie den Code, der von der Datenbank abgerufen wird und den Wert ausgibt, der an die Konsole gesendet wird. Es gibt einige Probleme mit diesem Code.
internal void Main()
{
var items = GetDataFromDB();
//NG1 NULL vor jeder Prüfung prüfen
if (items != null)
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
//NG2 NULL-Prüfung und Zählprüfung vor jeder Prüfung
if (items != null && items.Count > 0)
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
//Ich gehe davon aus, dass NG3 NULL nicht kommen wird, aber überprüfen Sie aus irgendeinem Grund die Anzahl der Fälle
if (items.Count > 0)
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
//Fehler, wenn die NG4-Liste null ist
if (items == null)
{
Console.WriteLine("Error");
}
}
/**Daten aus der DB abrufen**/
private List<string> GetDataFromDB()
{
//Holen Sie sich Daten aus der Datenbank und setzen Sie im Fehlerfall NULL.
//Es wird angenommen, dass der neue Teil Daten von Dao erhält.
try
{
var list = new List<string>();
list.Add("1");
list.Add("2");
return list;
}
catch (Exception)
{
return null;
}
}
Die Annahme von null wurde entfernt und die Ausnahme in den Rückgabewert aufgenommen.
internal void Main()
{
var result = GetDataFromDB();
var items = result.Items;
//Keine Notwendigkeit für Nullprüfung oder Zählprüfung
foreach (var item in items)
{
Console.WriteLine(item);
}
//Wenn eine Ausnahme aufgetreten ist, werden die Ausnahmeinformationen ausgegeben.
if (result.Exception !=null)
{
Console.WriteLine(result.Exception.ToString());
}
}
/**Daten aus der DB abrufen**/
private Result GetDataFromDB()
{
//Holen Sie sich Daten aus der Datenbank und setzen Sie im Fehlerfall NULL.
//Es wird angenommen, dass der neue Listenteil Daten von Dao erhält.
try
{
var list = new List<string>();
list.Add("1");
list.Add("2");
return new Result(list, null);
}
catch (Exception ex)
{
return new Result(new List<string>(), ex);
}
}
/**Verarbeitungsergebnisklasse einschließlich Rückgabewert und Ausnahmeverarbeitung**/
private class Result
{
internal List<string> Items { get; private set; }
internal Exception Exception { get; private set; }
internal Result(List<string> items, Exception ex)
{
this.Items = items;
this.Exception = ex;
}
}
Indem wir die Sammlung nicht auf Null setzen, konnten wir redundanten Code eliminieren. Es ist jedoch notwendig, eine andere Methode für diejenigen in Betracht zu ziehen, die "Überprüfen Sie die Anzahl der Fälle vor jedem". Auf mysteriöse Weise kann die Anzahl der Fälle überprüft werden oder nicht, sodass die Kriterien unbekannt sind. Ich denke nicht, dass die Regel, dass "Sie nicht die Anzahl der Fälle vor oder für jeden prüfen dürfen", nicht festgelegt wird.
Außerdem schreiben Personen, die Ausnahmen mit null behandeln, denselben Code, auch wenn es sich nicht um eine Sammlung handelt. Daher ist dies auch schwierig zu handhaben. Dieses Problem bei der Ausnahmebehandlung betrifft nicht nur Sammlungen.
Derzeit wird das Problem durch "Machen Sie die Sammlung nicht null" bis zu einem gewissen Grad gelöst. Üben Sie es daher bitte. Es ist jedoch nicht strengstens verboten, und wenn es unbedingt erforderlich ist, es auf Null zu setzen, sollten Sie es dem Architekten erklären und die Erlaubnis einholen.
protected void main() {
List<String> items = getDataFromDB();
//NG1 NULL vorher auf prüfen
if (items != null) {
for (String item : items) {
System.out.println(item);
}
}
//NG2 Nachdem Sie NULL und die Anzahl der Fälle überprüft haben, z
if (items != null && items.size() > 0) {
for (String item : items) {
System.out.println(item);
}
}
//Ich gehe davon aus, dass NG3 NULL nicht kommen wird, aber überprüfen Sie aus irgendeinem Grund die Anzahl der Fälle
if (items.size() > 0) {
for (String item : items) {
System.out.println(item);
}
}
//Fehler, wenn die NG4-Liste null ist
if (items == null) {
System.out.println("Error");
}
}
private List<String> getDataFromDB() {
//Holen Sie sich Daten aus der Datenbank und setzen Sie im Fehlerfall NULL.
//Es wird angenommen, dass der neue Teil Daten von Dao erhält.
try {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
return list;
} catch (Exception e) {
return null;
}
}
protected void main() {
Result result = getDataFromDB();
List<String> items = result.getItems();
//Keine Notwendigkeit für Nullprüfung oder Zählprüfung
for (String item : items) {
System.out.println(item);
}
//Wenn eine Ausnahme aufgetreten ist, werden die Ausnahmeinformationen ausgegeben.
if (result.getException() != null) {
System.out.println(result.getException().toString());
}
}
/**Daten aus der DB abrufen**/
private Result getDataFromDB() {
//Holen Sie sich Daten aus der Datenbank und setzen Sie im Fehlerfall NULL.
//Es wird angenommen, dass der neue Listenteil Daten von Dao erhält.
try {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
return new Result(list, null);
} catch (Exception e) {
return new Result(new ArrayList<String>(), e);
}
}
/**Verarbeitungsergebnisklasse einschließlich Rückgabewert und Ausnahmeverarbeitung**/
protected class Result {
private List<String> items;
private Exception exception;
protected Result(List<String> items, Exception exception) {
this.items = items;
this.exception = exception;
}
protected List<String> getItems() {
return items;
}
protected Exception getException() {
return exception;
}
}
[Vorheriger Artikel (redundante Zuweisungsanweisung)] (http://qiita.com/csharpisthebest/items/f9ebc741e40037553d5b)
Nächster Artikel (einfache Nullprüfung)
Recommended Posts