# I don't understand how to use this function

**URL:** <https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377>\
**Category:** Help\
**Created:** [October 6, 2022, 6:20pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377 "2022-10-06T18:20:46Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![JPL](https://ziggit.dev/letter_avatar_proxy/v4/letter/j/a9adbd/32.png) [@JPL](https://ziggit.dev/u/JPL)\
**Post date:** [October 6, 2022, 6:20pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377/1 "2022-10-06T18:20:46Z")

</div>

/// Returns an owned slice of this string

```zig
pub fn toOwned(self: String) Error!?[]u8 {
        if (self.len() != 0) {
            const string = self.str();
            if (self.allocator.alloc(u8, string.len)) |newStr| {
                std.mem.copy(u8, newStr, string);
                return newStr;
            } else |_| {
                return Error.OutOfMemory;
            }
        }

        return null;
    }

```

How to know if it is an error or null or a varu8

I stumble, over it

please thank you

---

<div class="post-metadata">

**Author:** ![JPL](https://ziggit.dev/letter_avatar_proxy/v4/letter/j/a9adbd/32.png) [@JPL](https://ziggit.dev/u/JPL)\
**Post date:** [October 6, 2022, 7:30pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377/2 "2022-10-06T19:30:42Z")

</div>

I understand that we can do this

```zig
var varsp = myStr.toOwned() catch |Error|label: {
                        std.debug.print("unable toOwned: {}\n", .{Error});
                        break :label continue; // or return 
                        };

```

I think you have to test

```zig
if (varsp != null) { ......
else {....

```

or do

```zig
var varsp = myStr.toOwned() catch unreachable;

```

is this the right solution

---

<div class="post-metadata">

**Author:** ![jumpnbrownweasel](https://ziggit.dev/user_avatar/ziggit.dev/jumpnbrownweasel/32/263_2.png) [@jumpnbrownweasel](https://ziggit.dev/u/jumpnbrownweasel)\
**Post date:** [October 6, 2022, 8:24pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377/3 "2022-10-06T20:24:51Z")

</div>

try and catch are for errors, while if/else and orelse are for optionals. Here are some examples using your code as a starting point.

```zig
    var optional_str_1: ?[]u8 = my_str.toOwned() catch |err| {
        std.debug.print("toOwned err={}\n", .{err});
        return;
    };    

    var optional_str_2: ?[]u8 = my_str.toOwned() catch |err| blk: {
        std.debug.print("toOwned err={}\n", .{err});
        break :blk null;
    };    

    if (optional_str_1) |str1| {
        std.debug.print("str1={s}\n", .{str1});
    }

    var str2: []u8 = optional_str_2 orelse "";
    std.debug.print("str2={s}\n", .{str2});

```

---

<div class="post-metadata">

**Author:** ![jumpnbrownweasel](https://ziggit.dev/user_avatar/ziggit.dev/jumpnbrownweasel/32/263_2.png) [@jumpnbrownweasel](https://ziggit.dev/u/jumpnbrownweasel)\
**Post date:** [October 6, 2022, 8:35pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377/4 "2022-10-06T20:35:33Z")

</div>

Or if you don’t need to print the error, it is much simpler to create optional\_str\_2:

```zig
    var optional_str_2: ?[]u8 = my_str.toOwned() catch null;

```

---

<div class="post-metadata">

**Author:** ![jumpnbrownweasel](https://ziggit.dev/user_avatar/ziggit.dev/jumpnbrownweasel/32/263_2.png) [@jumpnbrownweasel](https://ziggit.dev/u/jumpnbrownweasel)\
**Post date:** [October 7, 2022, 3:31pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377/5 "2022-10-07T15:31:30Z")

</div>

@jpl Did this answer your question?

---

<div class="post-metadata">

**Author:** ![JPL](https://ziggit.dev/letter_avatar_proxy/v4/letter/j/a9adbd/32.png) [@JPL](https://ziggit.dev/u/JPL)\
**Post date:** [October 7, 2022, 3:50pm UTC](https://ziggit.dev/t/i-dont-understand-how-to-use-this-function/377/6 "2022-10-07T15:50:16Z")

</div>

Yes completely 😉
