Comparison of COBOL with Other Managed Languages

Comparison of COBOL with Other Managed Languages

Arrays C# COBOL VB.NET Java declare nums = table of binary-long (1 2 3) public class Arrays int[] nums = {1, 2, 3}; Dim nums() As Integer = {1, 2, 3} { for (int i = 0; i < nums.Length; i++) declare names as string occurs 5 For i As Integer = 0 To nums.Length - 1 public static void main(String args[]) { *> Can also do: Console.WriteLine(nums(i)) { Console.WriteLine(nums[i]); declare names-again as string occurs any Next int nums[] = { 1, 2, 3 }; } set size of names to 5 ' 4 is the index of the last element, so it holds 5 elements String names[] = new String[5]; // 5 is the size of the array set names(1) to "David" *> first element indexed as 1 Dim names(4) As String string[] names = new string[5]; *> ...but can also use zero based subscripting: names(0) = "David" names[0] = "David"; names[0] = "David"; set names[0] to "David" *> first element indexed as 0 names(5) = "Bobby" ' Throws System.IndexOutOfRangeException names[5] = "Bobby"; // Throws System.IndexOutOfRangeException // names[5] = "Bobby"; // throws ArrayIndexOutOfBoundsException // C# can't dynamically resize an array. Just copy into new array. *>set names(6) to "Bobby" *> throws System.IndexOutOfRangeException ' Resize the array, keeping the existing values (Preserve is optional) string[] names2 = new string[7]; ' Note, however, that this produces a new copy of the array -- // Can't resize arrays in Java Array.Copy(names, names2, names.Length); // or names.CopyTo(names2, 0); *> COBOL does not have direct resizing syntax but achieves similar ' it is not an in-place resize! *> results using 'reference modification' syntax: ReDim Preserve names(6) String names2[]; declare names2 as string occurs 7 set names2[0:size of names] to names // Copy elements from an array float[,] twoD = new float[rows, cols]; *> Resizing to a smaller size is even simpler: names2 = java.util.Arrays.copyOfRange(names, 0, 3); twoD[2,0] = 4.5f; set names2 to names[0:3] Dim twoD(rows-1, cols-1) As Single float twoD[][]; int[][] jagged = new int[][] { declare twoD as float-short occurs any, any. twoD(2, 0) = 4.5 new int[] {1, 2}, declare rows as binary-long = 3 int rows = 3; new int[] {3, 4, 5}, declare cols as binary-long = 10 Dim jagged()() As Integer = { int cols = 10; new int[] {6, 7, 8, 9} }; set size of twoD to rows, cols New Integer(2) {1, 2}, jagged[0][4] = 5; New Integer(3) {3, 4, 5}, twoD = new float[rows][cols]; declare jagged = table of (table of binary-long(1 2) New Integer(4) {6, 7, 8, 9}} table of binary-long(3 4 5) jagged(0)(4) = 5 int[][] jagged = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } }; table of binary-long(6 7 8 9)) int[][] jagged2 = new int[3][]; *> Can also do: jagged[0] = new int[5]; declare jagged2 as binary-long occurs any, occurs any jagged[0][4] = 5; set size of jagged2 to 3 set size of jagged2(1) to 5 } set jagged2(1 5) to 5 } Async C# COBOL VB.NET Java // Calling async methods *> Calling async methods ' Calling async methods // Java has no async coroutine support. await Task.Delay(1000); invoke await type Task::Delay(1000) Await Task.Delay(1000) // Similar behaviour is typically achieved by using var items = await ProcessItemsAsync("user", 8); declare items = await ProcessItemsAsync("user", 8) Dim items = Await ProcessItemsAsync("user", 8) // executors. // Run code on background thread *> Run code on background thread ' Run code on background thread await Task.Run( await type Task::Run( Await Task.Run( () => { delegate Sub() Console.WriteLine("On background thread"); invoke type Console::WriteLine("On background thread") Console.WriteLine("On background thread") }); end-delegate) End Sub) // An async void method *> An async void method ' An async void method async void button1_Click(object sender, EventArgs e) method-id button1_Click async-void (sender as object, Async Sub button1_Click(sender As Object, e As EventArgs) { e as type EventArgs). button1.Enabled = False button1.Enabled = false; set button1::Enabled to false Await Task.Delay(1000) await Task.Delay(1000); invoke await type Task::Delay(1000) button1.Enabled = True button1.Enabled = true; set button1::Enabled to true End Sub } end method. // An async method returning no result *> An async method returning no result ' An async method returning no result async Task ProcessAsync() method-id Task ProcessAsync() async. Async Function ProcessAsync() As Task { invoke await type Task::Yield() Await Task.Yield() await Task.Yield(); invoke type Console::WriteLine("async...") Console.WriteLine("async...") Console.WriteLine("async..."); end method. End Function } // An async method returning a result *> An async method returning a result ' An async method returning a result async Task<string[]> ProcessItemsAsync(string type, int count) method-id ProcessItemsAsync async (#type as string, Async Function ProcessItemsAsync([type] As String, count As Integer) As Task(Of String()) { #count as binary-long) Await Task.Delay(1000) await Task.Delay(1000); yielding items as string occurs any. Return New String() {"a", "b", "c"} return new[] { "a", "b", "c" }; invoke await type Task::Delay(1000) End Function } set items to table of ("a", "b", "c") end method. // An async value-task method returning a result *> An async value-task method returning a result ' Async value-task methods are not currently supported in VB.NET async ValueTask<string> MaybeProcess(bool x) method-id MaybeProcess async-value (x as condition-value) { yielding result as string. if (x) { if x await Task.Delay(1000); invoke await type Task::Delay(1000) return "x"; set result to "x" } else { else return "y"; set result to "y" } end-if } end method. Choices C# COBOL VB.NET Java declare age as binary-long = 10 public class choices greeting = age < 20 ? "What's up?" : "Hello"; declare greeting as string greeting = IIf(age < 20, "What's up?", "Hello") { *>greeting = age < 20 ? has no directly equivalent syntax in COBOL // Good practice is that all consequents are enclosed in {} ' One line doesn't require "End If" public static void main(String[] args) // or are on the same line as if. if age < 20 If age < 20 Then greeting = "What's up?" { if (age < 20) greeting = "What's up?"; move "What's up?" to greeting If age < 20 Then greeting = "What's up?" Else greeting = "Hello" int age = 10; else else String greeting = age < 20 ? "What's up?" : "Hello"; { move "Hello" to greeting ' Use : to put two commands on same line greeting = "Hello"; end-if If x <> 100 And y < 5 Then x *= 5 : y *= 2 if (age < 20) } { declare x as binary-long = 200 greeting = "What's up?"; // Multiple statements must be enclosed in {} declare y as binary-long = 3 ' Preferred } else if (x != 100 && y < 5) if x not = 100 and y < 5 If x <> 100 And y < 5 Then { { multiply 5 by x x *= 5 greeting = "Hello"; x *= 5; multiply 2 by y y *= 2 } y *= 2; end-if End If } int x = 200; int y = 3; //No need for _ or : since ; is used to terminate each statement. ' To break up any long single line use _ *> evaluate is preferred in COBOL rather than if/else if/else If whenYouHaveAReally < longLine And _ if (x != 100 && y < 5) if (x > 5) evaluate x itNeedsToBeBrokenInto2 > Lines Then _ { { when > 5 UseTheUnderscore(charToBreakItUp) x = 5 * x; x *= y; multiply y by x y = 2 * y; } when 5 If x > 5 Then } else if (x == 5) add y to x x *= y { when < 10 ElseIf x = 5 Then if (x > 5) x += y; subtract y from x x += y { } when other ElseIf x < 10 Then x = x * y; else if (x < 10) divide y into x x -= y } { end-evaluate Else else if (x == 5) x -= y; x /= y { } End If x = x + y; else } { else if (x < 10) x /= y; { } declare color as string = "blue" x = x - y; declare r b g other-color as binary-long } // Every case must end with break or goto case evaluate color *> can be any type Select Case color ' Must be a primitive data type else switch (color) // Must be integer or string when "pink" Case "pink", "red" { { when "red" r += 1 x = x / y; case "pink": add 1 to r Case "blue" } case "red": r++; break; when "blue" b += 1 case "blue": b++; break; add 1 to b Case "green" String color = "blue"; case "green": g++; break; when "green" g += 1 int r = 0, b = 0, g = 0, other_color = 0; default: other++; break; // break necessary on default add 1 to g Case Else } when other other += 1 if (color.equals("pink") || color.equals("red")) add 1 to other-color End Select { end-evaluate r++; } else if (color.equals("blue")) { b++; } else if (color.equals("green")) { other_color++; } } } 1 Classes Interfaces C# COBOL VB.NET Java *> Accessibility keywords //Accessibility keywords *>public ' Accessibility keywords //Accessibility keywords public *>private Public public private *>internal Private private internal *>protected Friend // The closest counterpart to .NET's "internal" is specified protected *>protected internal Protected // by ommitting the visibility keyword, though this "default" protected internal *>static Protected Friend // visibility has some behaviour differences. static Shared protected class-id Competition. static // Inheritance ' Inheritance class FootballGame : Competition end class. Class FootballGame // Inheritance { Inherits Competition class FootballGame extends Competition ... *> Inheritance ... { } class-id FootballGame inherits type Competition. End Class ... } end class. ' Interface definition // Interface definition Interface IAlarmClock interface IAlarmClock ... // Interface definition { *> Interface definition End Interface interface IAlarmClock ... interface-id IClock. { } ' Extending an interface ... end interface. Interface IAlarmClock } // Extending an interface Inherits IClock interface IAlarmClock : IClock interface-id ITimer. ... // Extending an interface { End Interface interface IAlarmClock extends IClock ... end interface. { } ' Interface implementation ... *> Extending an interface Class WristWatch } interface-id IAlarmClock inherits type IClock. Implements IAlarmClock, ITimer // Interface implementation ... class WristWatch : IAlarmClock, ITimer end interface.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    6 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us